背景
我试图强制浏览器下载图片以响应按钮(或链接)点击,而不是内联显示。我需要这个才能跨浏览器工作,所以HTML5属性还不够。
图像存储在blob(天蓝色存储服务)中。
我尝试了什么:
要将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;
要从链接调用图像,请单击\ window.open(image_url)\ window.location = image_url。 随着背景中的提琴手。
问题: IE将图像显示为内嵌图像。检查提琴手并看到:
contentDisposition不存在于响应标头中。
响应中的x-ms-version不是我设置的默认版本。我继续使用旧版本2009-09-19。
所以我也尝试直接从fiddler生成请求,请求header中指定了x-ms-version。这确实有效,我正在获得我期望的响应,使用contentDisposition属性和正确的x-ms-version(我添加到请求中的那个 - 2013-08-15)。
我理解问题出在默认服务版本上,当我检查(调试时)DefaultServiceVersion属性的值时,我确实看到了正确的值(2013-08-15),但响应仍包含旧值
在从链接(或从window.open)生成请求时,我无法将x-ms-version添加到标题中,而且我真的不明白为什么我添加的默认值不是&#39工作。
提前感谢您提供任何帮助或建议如何解决此问题。
答案 0 :(得分:3)
我想我知道发生了什么。请查看以下链接:http://msdn.microsoft.com/en-us/library/azure/dd894041.aspx(转到标题为:Requests Via Anonymous Access
的部分)
如果对Blob服务的请求未指定x-ms-version 标头,并且尚未使用设置服务的默认版本 设置Blob服务属性,然后是最早版本的Blob service用于处理请求。 但是,如果容器是 使用版本执行Set Container ACL操作公开 2009-09-19或更新版本,然后使用版本处理请求 2009-09-19 强>
您很可能在更改服务版本之前创建了容器或更改了它的ACL,因此如果没有提供服务版本,则使用旧版本。
您可以尝试两件事:
Private
,然后将其更改回Public
。由于现在使用最新版本的库执行操作(我假设),下载blob时不应该遇到此错误。