簡體   English   中英

如何通過“保存對話框”從ASP.NET MVC中的Azure下載PDF文件

[英]How to Download a PDF file from Azure in ASP.NET MVC via Save Dialog

我有一個存儲在Azure存儲上的文件,我需要從ASP.NET MVC控制器下載。 下面的代碼實際上工作正常。

string fullPath =  ConfigurationManager.AppSettings["pdfStorage"].ToString() + fileName ;
Response.Redirect(fullPath);

但是,PDF將在同一頁面中打開。 我希望通過“保存”對話框下載文件,以便用戶保持在同一頁面上。 在轉移到Azure之前,我可以寫

return File(fullPath, "application/pdf", file);

但是Azure無法正常工作。

當您說Azure Storage ,假設您的意思是Azure Blob Storage ,還有另外兩種方法,無需將文件從存儲實際下載到您的Web服務器,這兩種方法都涉及在Blob上設置Content-Disposition屬性。

  1. 如果您希望在通過URL訪問時始終下載文件 ,則可以設置blob的content-disposition屬性。

     var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true); var blobClient = account.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("container-name"); var blob = container.GetBlockBlobReference("somefile.pdf"); blob.FetchAttributes(); blob.Properties.ContentDisposition = "attachment; filename=\\"somefile.pdf\\""; blob.SetProperties(); 
  2. 但是,如果您希望有時下載文件並在瀏覽器中顯示其他時間 ,則可以創建共享訪問簽名並覆蓋SAS中的content-disposition屬性並使用該SAS URL進行下載。

      var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true); var blobClient = account.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("container-name"); var blob = container.GetBlockBlobReference("somefile.pdf"); var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy() { Permissions = SharedAccessBlobPermissions.Read, SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(15), }, new SharedAccessBlobHeaders() { ContentDisposition = "attachment; filename=\\"somefile.pdf\\"", }); var downloadUrl = string.Format("{0}{1}", blob.Uri.AbsoluteUri, sasToken);//This URL will always do force download. 

您可以下載該文件,然后推送到Web瀏覽器,以便用戶可以保存。

var fileContent = new System.Net.WebClient().DownloadData(fullPath); //byte[]

return File(fileContent, "application/pdf", "my_file.pdf");

此特定重載采用字節數組,內容類型和目標文件名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM