c# - 使用 SAS 将文件从 Azure Blob 存储下载到浏览器
问题描述
在我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
解决方案
我能够通过使用iframe
. 如果我iframe
在页面中添加一个:
<iframe id="iframeFile" runat="server" style="display:none;"></iframe>
然后在代码文件中设置源:
iframeFile.Src = blobUrl;
它下载文件。
这可能并不理想,我仍然不确定为什么Response.Redirect
没有按预期工作。所以我当然也愿意接受其他建议。但此解决方法确实解决了无法下载文件的问题。
推荐阅读
- python - PySide2 QListView QTableView 同步问题
- python - python - 如何在出现密钥错误时在python中连接redis服务器?
- http - 如何取消在 Flutter 中使用 http.MultipartRequest() 发送的正在进行的文件上传?
- css - 我可以在 cpanel 中使用 !important 吗?我使用 viewen 并获得了 cpanel 但不能在我的 css 中使用 !important 属性
- reactjs - 在 React+Redux 项目中使用 Bootstrap 和 jQuery 库
- python - 如何使由线程更新的字符串反映 Python 诅咒的变化?
- vue.js - 即使响应为 200(成功),也会调用 Axios Catch
- java - appium`HasClipboard()`的“方法尚未实现”异常
- android - 颤振:断言失败:'builder!= null home!= null
- html - 在字段集图例标题旁边添加图标