[英]Download and Rename Files from Azure Blob Storage with AspNet
我正在開發一個 web 平台來管理文件的上傳/下載。 前端使用 React 開發,后端使用 ASP.NET 和 Azure Blob Containers 來存儲上傳的文件。
至於上傳,我使用微軟的“Azure 存儲客戶端庫”通過 SAS 身份驗證,將文件直接從客戶端發送到 Azure。 這個 Javascript 庫允許我在整個過程中更新進度條。
至於下載,過程比較復雜:首先從服務器下載文件(階段1或Azure->Server),然后從客戶端下載(階段2或Server->Client)。 第一階段給我帶來了兩個問題:
為了解決這些問題,我想要以下解決方案之一:
這是我當前的 C #function 允許下載文件
using Microsoft.WindowsAzure.Storage.Blob;
private IActionResult DownloadFile(...) {
...
using (var blobStream = new MemoryStream()) {
string blobName = ...
CloudBlobContainer cloudBlobContainer = ...
CloudBlockBlob blob = cloudBlobContainer.GetBlockBlobReference(blobName);
blob.DownloadToStream(blobStream);
return new FileContentResult(blobStream.ToArray(), "application/pdf");
}
}
編輯:
在我用來生成 SAS 令牌的代碼下方:
private string GetSasReadToken(string connectionString, string containerName) {
var storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);
var sasConstraints = new SharedAccessBlobPolicy {
SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(60),
Permissions = SharedAccessBlobPermissions.Read
};
var sasContainerToken = cloudBlobContainer.GetSharedAccessSignature(sharedAccessBlobPolicy);
}
為了使用Content-Disposition
,您需要在 blob 上生成 SAS 令牌(當前您正在 blob 容器上創建 SAS 令牌)。 然后,您將需要使用SharedAccessBlobHeaders
並在那里定義 content-disposition 值。
這是示例代碼(雖然未經測試):
private string GetSasReadToken(string connectionString, string containerName, string blobName) {
var storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference(containerName);
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(blobName);
var sasConstraints = new SharedAccessBlobPolicy {
SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddMinutes(60),
Permissions = SharedAccessBlobPermissions.Read,
};
var sasHeaders = new SharedAccessBlobHeaders();
sasHeaders.ContentDisposition = "attachment;filename=<your-download-file-name>";
var sasBlobToken = cloudBlockBlob.GetSharedAccessSignature(sharedAccessBlobPolicy, sasHeaders);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.