【发布时间】:2021-04-29 21:07:54
【问题描述】:
在我的DownloadFile 页面的Page_Load 方法中,从查询字符串中检索用户希望下载的文件名。该文件托管在 Azure Blob 存储帐户中。我正在尝试通过这种方法使用共享访问签名 (SAS) 下载文件:
var containerName = "containerName";
var con = "connectionString";
CloudStorageAccount account = CloudStorageAccount.Parse(con);
var blobClient = account.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference("file.pdf");
var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10),
}, new SharedAccessBlobHeaders()
{
ContentDisposition = "attachment; filename=file.pdf"
});
var blobUrl = string.Format("{0}{1}", blob.Uri.AbsoluteUri, sasToken);
Response.Redirect(blobUrl);
但是,这不会下载文件。相反,浏览器只会显示文件的乱码:
blobUrl 似乎是有效的。但是Response.Redirect 没有按预期工作。我做错了吗?
注意:我使用的是 WebForms(很遗憾),不是 MVC
【问题讨论】:
-
这能回答你的问题吗? Downloading Azure Blob files in MVC3
-
是否需要将 ContentType 属性设置为
application/pdf? -
@Glenn 我不这么认为,因为 URL 指向实际文件,该文件托管在 Azure 中。响应不包含文件。我确实尝试过,但没有任何运气。
-
@404 不幸的是,没有区别。此外,文件本身不包含在响应中。它没有首先下载到服务器。 Intead,使用 Azure 存储 SAS 令牌生成 URL,
Response.Redirect将重定向到生成的 URL。
标签: c# asp.net azure azure-storage azure-blob-storage