继续获取旧版本,即使在更改 Azure Blob 上的默认服务版本后也是如此(为了设置内容处置标头)
本文关键字:版本 设置 服务 获取 默认 继续 Azure Blob | 更新日期: 2023-09-27 18:19:18
background:
我试图强制浏览器下载图像以响应按钮(或链接(单击,而不是内联显示它。我需要它来跨浏览器工作,所以HTML5属性是不够的。
映像存储在 Blob 中(Azure 存储服务(。
我尝试过:
-
将 DefaultServiceVersion 设置为 2013-08-15,以便 contentDisposition 正常工作。(此处的示例 Azure Storage API ContentDisposition(:
var cloudStorageAccount = new CloudStorageAccount(new StorageCredentials("accountname", "accountkey"), false); var serviceProperties = cloudStorageAccount.CreateCloudBlobClient().GetServiceProperties(); serviceProperties.DefaultServiceVersion = "2013-08-15"; cloudStorageAccount.CreateCloudBlobClient().SetServiceProperties(serviceProperties);
-
设置内容处置属性(http://www.tuicool.com/articles/AFbmY3 中的示例(:
blob.Properties.ContentDisposition = "attachment; filename=" + downloadName;
-
要从链接调用图像,请单击''窗口.打开(image_url(''窗口.位置 = image_url。背景是小提琴手。
问题:IE 将图像显示为内联图像。检查小提琴手,看到:
-
内容处置在响应标头中不存在。
-
响应中的 x-ms 版本不是我设置为默认的版本。我继续得到旧版本 2009-09-19.
因此,我还尝试直接从 fiddler 生成请求,并在请求标头中指定 x-ms 版本。这确实有效,并且我得到了我期望的响应,具有contentDisposition属性和正确的x-ms版本(我添加到请求中的版本-2013-08-15(。
我知道问题出在默认服务版本上,当我检查(调试时(DefaultServiceVersion 属性的值时,我确实看到了正确的值(2013-08-15(,但响应仍然包含旧值。
从链接(或从 window.open(生成请求时,我无法将 x-ms-version 添加到标头中,而且我真的不明白为什么我添加的默认值不起作用。
提前感谢您提供如何解决此问题的任何帮助或建议。
我知道发生了什么。请查看此链接:http://msdn.microsoft.com/en-us/library/azure/dd894041.aspx(转到标题为:Requests Via Anonymous Access
的部分,内容如下(
如果对 Blob 服务的请求未指定 x-ms 版本 标头,并且尚未使用 设置服务的默认版本 设置 Blob 服务属性,然后设置 Blob 的最早版本 服务用于处理请求。但是,如果容器是 使用版本执行的"设置容器 ACL"操作公开 2009-09-19 或更高版本,则使用版本 处理请求 2009-09-19.
很可能是在更改服务版本之前创建了容器或更改了其 ACL,因此如果未提供服务版本,则它使用的是旧版本。
您可以尝试两种方法:
- 创建一个将 ACL 作为公共的新 Blob 容器,并尝试从那里下载 Blob。由于容器是使用新的服务版本创建的,因此不应遇到此错误。
- 将容器 ACL 更改为
Private
,然后将其更改回Public
。由于该操作现在是使用最新版本的库执行的(我假设(,因此在下载 blob 时不应遇到此错误。