[英]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
屬性。
如果您希望在通過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();
但是,如果您希望有時下載文件並在瀏覽器中顯示其他時間 ,則可以創建共享訪問簽名並覆蓋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.