【发布时间】:2014-10-17 18:59:43
【问题描述】:
背景:
我试图强制浏览器下载图像以响应按钮(或链接)点击,而不是内联显示。我需要它来跨浏览器工作,所以 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; 从链接调用图像 click\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 添加到标头,而且我真的不明白为什么我添加的默认值不起作用。
提前感谢您提供任何帮助或建议如何解决此问题。
【问题讨论】:
-
在第 2 步之后,您是否在 blob 上调用了
SetProperties()方法? -
是的,当我在请求中发送 x-ms-version(使用提琴手)时,我确实得到了 ContentDisposition 值。
标签: c# azure azure-blob-storage content-disposition