继续获取旧版本,即使在更改 Azure Blob 上的默认服务版本后也是如此(为了设置内容处置标头)

本文关键字:版本 设置 服务 获取 默认 继续 Azure Blob | 更新日期: 2023-09-27 18:19:18

background:

我试图强制浏览器下载图像以响应按钮(或链接(单击,而不是内联显示它。我需要它来跨浏览器工作,所以HTML5属性是不够的。

映像存储在 Blob 中(Azure 存储服务(。

我尝试过:

  1. 将 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);
    
  2. 设置内容处置属性(http://www.tuicool.com/articles/AFbmY3 中的示例(:

    blob.Properties.ContentDisposition = "attachment; filename=" + downloadName;
    
  3. 要从链接调用图像,请单击''窗口.打开(image_url(''窗口.位置 = image_url。背景是小提琴手。

问题:IE 将图像显示为内联图像。检查小提琴手,看到:

  1. 内容处置在响应标头中不存在。

  2. 响应中的 x-ms 版本不是我设置为默认的版本。我继续得到旧版本 2009-09-19.

因此,我还尝试直接从 fiddler 生成请求,并在请求标头中指定 x-ms 版本。这确实有效,并且我得到了我期望的响应,具有contentDisposition属性和正确的x-ms版本(我添加到请求中的版本-2013-08-15(。

我知道问题出在默认服务版本上,当我检查(调试时(DefaultServiceVersion 属性的值时,我确实看到了正确的值(2013-08-15(,但响应仍然包含旧值。

从链接(或从 window.open(生成请求时,我无法将 x-ms-version 添加到标头中,而且我真的不明白为什么我添加的默认值不起作用。

提前感谢您提供如何解决此问题的任何帮助或建议。

继续获取旧版本,即使在更改 Azure Blob 上的默认服务版本后也是如此(为了设置内容处置标头)

我想

我知道发生了什么。请查看此链接: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,因此如果未提供服务版本,则它使用的是旧版本。

您可以尝试两种方法:

  1. 创建一个将 ACL 作为公共的新 Blob 容器,并尝试从那里下载 Blob。由于容器是使用新的服务版本创建的,因此不应遇到此错误。
  2. 将容器 ACL 更改为 Private,然后将其更改回 Public 。由于该操作现在是使用最新版本的库执行的(我假设(,因此在下载 blob 时不应遇到此错误。