Azure存储 - 使用MVC&amp ;;下载大文件SharedAccessFilePolicy

时间:2017-04-25 12:41:28

标签: asp.net-mvc-5 azure-storage

我目前正在使用简单的

从我们的网站下载文件
    public ActionResult Download() {
        return File(@"D:\Company\Installs\Download.exe", "application/octet-stream", "Download.exe");
    }

这很好用,当用户点击该文件时,他们会在文件下载时看到%进度。

我们现在转向Azure文件存储,我尝试使用CloudStorageAccount模拟相同的进程。总的来说,它运行良好,但我想为用户提供相同的用户体验。我认为我非常接近于解决这个问题,但最终的回归'并没有给我一个有效的ActionResult。

    public async Task<ActionResult> Download() {
        var fileName = "Download.exe";

        var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;....");

        var fileClient = storageAccount.CreateCloudFileClient();

        var share = fileClient.GetShareReference("downloads");

        if (!await share.ExistsAsync()) {
            return new EmptyResult();
        }

        var rootDir = share.GetRootDirectoryReference();

        var cloudFile = rootDir.GetFileReference(fileName);

        if (!await cloudFile.ExistsAsync()) {
            return new EmptyResult();
        }

        var policy = new SharedAccessFilePolicy
        {
            Permissions = SharedAccessFilePermissions.Read,
            SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-15),
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1)
        };

        var url = cloudFile.Uri.AbsoluteUri + cloudFile.GetSharedAccessSignature(policy);

        // return File(url, "application/octet-stream", fileName);
        return Redirect(url);
    }

可以将返回的URL复制/粘贴到浏览器中,并正确下载文件。但是当它作为FilePathResult被返回时,我得到了ERR_INVALID_RESPONSE,奇怪的是,该方法被调用了3次。怪异。

有人可以帮我解决最后一行代码吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

我终于完成了所有这些工作。使其发挥作用的最终改变是

return Redirect(url);