带有共享访问签名和自定义响应标头的 Windows Azure Blob 存储下载

问题描述

我使用 Windows Azure Blob 存储来保存文件。 要下载文件,我创建了带有共享访问签名的 url。 它工作正常,但有一个问题。 某些文件(blob)在上传过程中设置了标题“Content-Type”,其他没有。 如果文件没有 Content-Type 而不是针对 Azure 的请求,则响应将包含标题 Content-Type: application/octet-stream 。这正是我所需要的,因为在这种情况下,浏览器会为用户显示“下载对话框”。

但是对于上传时设置了此标头的文件,它会被返回,有时会出现问题。例如,Content-Type: images/jpeg 使浏览器显示此图像,但不下载(不显示下载对话框)

所以,我的问题是 有没有办法从 WIndows Azure 下载带有预签名 url 的方法来强制使用某些特定的响应标头? 我希望它的行为就像没有为文件保存 Content-Type 一样,即使它被保存

解决方法

所以,经过一段时间的浏览,我终于找到了有关它的文档。

有参考。 https://nxt.engineering/en/blog/sas_token/ https://docs.microsoft.com/en-us/rest/api/storageservices/service-sas-examples https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas

对我来说,需要升级 API 的版本(我使用的是 2012 API 版本)。

还有一个有用的注释。日期格式非常有意义。到期时间必须采用“2021-11-16T04:25:00Z”等格式。

我添加了 2 个新参数 'rscd=文件;%20附件&rsct=二进制&'。 并且两者都必须在签名字符串中才能在正确的位置签名

,

所以,我的问题是有没有办法使用预签名的 url 从 WINdows Azure 强制使用某些特定的响应标头?我要它 表现得好像没有为文件保存 Content-Type,即使它是 已保存

是的,您可以覆盖 SAS 令牌中的 Content-Disposition 响应标头,无论其内容类型如何,都会始终下载 blob。

您可以将此标头覆盖为 attachment; filename=yourdesiredfilename 之类的值,并且 blob 将始终以 yourdesiredfilename 名称下载。