本文介绍通过浏览器访问存储在OSS中的资源时被强制下载的可能原因,以及如何配置访问OSS文件时是预览行为的方法。

问题现象

通过浏览器访问存储在OSS中的资源时无法预览而是以附件形式下载。

问题原因

  • 使用OSS默认域名或传输加速域名访问某个时间点创建的Bucket内的特定类型文件时,OSS会强制在返回头中增加以下两个Header。
    x-oss-force-download:true
    Content-Disposition: attachment

    标准浏览器检测到Content-Disposition: attachment时,会出现下载而不是预览行为。

    以下为使用OSS默认域名或传输加速域名访问不同类型文件,导致强制下载时命中的x-oss-ec规则说明。

    • OSS默认域名
      Bucket创建时间Content-Typex-oss-ec
      2017年10月01日00:00或该日期之后text/html0048-00000001
      2019年09月23日17:00或该日期之后
      • image/jpeg
      • image/gif
      • image/tiff
      • image/png
      • image/webp
      • image/svg+xml
      • image/bmp
      • image/x-ms-bmp
      • image/x-cmu-raster
      • image/exr
      • image/x-icon
      • image/heic
      • text/html
      0048-00000100
      2019年09月24日11:00或该日期之后0048-00000101
      2019年09月24日17:00或该日期之后0048-00000102
      2019年09月29日17:00或该日期之后0048-00000103
      2019年09月29日18:00或该日期之后0048-00000104
      2019年09月30日15:00或该日期之后0048-00000105
      2022年10月09日00:00或该日期之后全部0048-00000113
    • 传输加速域名
      Bucket开启传输加速的时间Content-Typex-oss-ec
      2020年12月31日00:00或该日期之后text/html0048-00000002
      2020年11月17日11:07或该日期之后全部0048-00000106
      2021年01月07日12:00或该日期之后0048-00000107
      2021年01月07日18:00或该日期之后0048-00000108
      2021年01月08日18:00或该日期之后0048-00000109
      2021年01月14日12:00或该日期之后0048-00000110
      2021年01月16日00:00或该日期之后0048-00000111
      2023年02月01日00:00或该日期之后0048-00000112
  • Content-Type设置为application/octet-streamapplication/octet-stream是二进制的下载流,导致强制下载。
  • Content-Disposition设置为attachment
  • CDN缓存了错误的Content-Type或者Content-Disposition。
  • 浏览器不支持预览该格式的文件或者图片。

解决方法

  • 因使用OSS默认域名或传输加速域名访问OSS资源导致的强制下载问题,您需要使用自定义域名访问文件。具体步骤,请参见控制台使用自有域名访问OSS资源
  • 因Content-Type设置导致的强制下载问题,您需要根据文件类型设置合理的Content-Type,同时确保浏览器支持预览该文件类型。关于Content-Type的更多信息,请参见如何设置Content-Type(MIME)?
  • 因Content-Disposition设置导致的强制下载问题,您需要将Object Meta中的Content-Disposition设置为inline。具体步骤,请参见管理文件元信息
  • 因CDN缓存导致的强制下载问题,您需要更新CDN缓存信息。
  • 因浏览器不支持预览文件格式导致的强制下载,您需要确认浏览器已安装支持预览当前格式文件的插件。