2017-04-25 35 views
0

我使用的是简单的Azure存储 - 下载大文件与MVC和SharedAccessFilePolicy

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次。奇怪的。

有人可以帮助我的最后一行代码?

在此先感谢!

回答

2

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

return Redirect(url);