在我们的应用程序中,我们给予用户将文档上传到windows azure blob存储帐户的能力。(网址://name.blob.core.windows.net/container/file-name.jpg)。如果文档是图像或pdf或浏览器可以渲染的某些文件,我们试图在浏览器中显示它而不需要用户下载文件。如果我们只是打开一个新窗口或选项卡并将用户定向到IE中的blob uri,则图像或pdf在浏览器中正确渲染。但是,如果我们试图在Chrome中打开一个指向uri的新窗口,Firefox或Safari,它只是下载文件,而不是在浏览器中显示它。
有没有办法强制后三种浏览器只显示文件而不下载?
6条答案
按热度按时间pdtvr36n1#
这是因为您没有设置blob的content type属性(默认值为application/octet-stream,在大多数浏览器中会触发下载)。如果您希望PDF文件正确显示,您需要将PDF文件的内容类型更改为application/pdf(对于jpeg文件,为image/jpeg)。
您可以使用Azure Storage Explorer、Cloud Storage Studio、CloudBerry、CloudXplorer等常用工具或使用SDK更改内容类型。请注意,其中一些工具会在上传文件后自动将内容类型设置为正确的类型。
py49o6xq2#
字符串
//通过扩展名获取文件的内容类型
型
保存blob时使用此选项设置blob的内容类型。
Set Content-type of media files stored on Blob
esyap4oy3#
对于那些通过PowerShell上传文件,使用下面的语法在上传过程中设置内容类型。
字符串
上面我将blob内容类型设置为text/plain,这在上传将与模板一起使用的JSON和HTML文件时很有用。更多内容类型头值列表here。
fruv7luv4#
如果使用Azure SDK(12.x+),则需要使用传递到上传方法的BlobHttpHeaders(而不是blob.Properties.ContentType)。
举例来说:
字符串
eiee3dmh5#
我有一个类似的问题,想通过Twilio Whatsapp API发送OGG(语音消息)。
对我来说,这解决了问题:
字符串
pxq42qpu6#
感谢sudhAnsu 63和Steve G提供有用的答案!
这里是一个最小的可复制的代码解决方案,在Visual Basic中设置ContentType并通过调用函数“uploadImageBlob”上传到Azure Blob存储,设置内容类型将帮助浏览器知道如何处理图像,这样它将只显示图像/文件,而不是在访问时开始下载。
顺便说一句,我不会只是复制和粘贴到您的代码,并希望您处理您的连接字符串和文件名在一个更好的,更动态的方式。
字符串