Azure文件存储内容类型始终为应用程序/八位字节流

Dav*_*tes 7 azure azure-storage-files

当我使用共享访问签名(SAS)令牌构建URL时,Azure文件存储当前遇到问题。该文件将在浏览器中下载,但是内容类型始终是application / octet-stream,而不是更改为与文件的mime类型匹配。如果我将文件放在Azure BLOB存储中,并使用SAS令牌构建URL,则它将为我的文件发送正确的内容类型(图像/ jpeg)。

我已将存储帐户从V1升级到V2,认为这是问题所在,但并不能解决问题。

有谁知道我可以尝试做些什么,使Azure文件存储使用带有SAS令牌的URL返回正确的内容类型来下载文件?

Dav*_*tes 6

到目前为止,这些是我发现的内容类型的唯一修复:

  1. 使用 Microsoft Azure 存储资源管理器手动修改内容类型字符串。您必须右键单击该文件并左键单击属性才能显示对话框。
  2. 使用 Microsoft 的 WindowsAzure.Storage Nuget 包以编程方式修改该文件。
  3. 通过我自己的网站下载表面文件,并且不允许直接访问。

对我来说,这些都不是可以接受的选择。如果用户通过门户或 Microsoft Azure Storage Explore 上传文件并忘记更改内容类型,前两种情况可能会导致错误。我也不想编写 Azure Functions 或 Web 作业来监视和修复此问题。

由于 Blob 存储在通过 Microsoft Azure Storage Explore 或通过门户上传时不会出现相同的问题,因此成本要低得多,并且都可以使用 SAS 令牌,因此我们正在转向 Blob 存储。我们确实失去了将驱动器安装到本地计算机并使用 Beyond Compare 之类的工具进行文件比较的能力,但这是我们可以忍受的缺点。

如果有人有比上面提到的更好的解决方案来解决这个问题,我会很乐意投票。不过,我认为微软必须做出改变才能解决这个问题。


Jer*_*Liu 6

当我通过门户将 jpeg 文件上传到文件共享时,内容类型更改为application/octet-stream确实。但我无法重现您的下载问题。

我没有在 SAS 请求 uri 中指定内容类型,但文件只是作为 jpeg 文件下载。已在 SDK(帐户 SAS/存储访问策略/文件本身的 SAS)或 REST API 中进行测试,即使没有内容类型,两者也能正常工作。

您可以尝试使用下面的代码指定内容类型。

 SharedAccessFileHeaders header = new SharedAccessFileHeaders()
 {
     ContentDisposition = "attachment",
     ContentType = "image/jpeg"
 };
string sasToken = file.GetSharedAccessSignature(sharedPolicy,header);
Run Code Online (Sandbox Code Playgroud)