登录控制台,点击存储桶中文件的详情,可以获取文件的url。
有客户反馈,通过浏览器打开图片文件的url,能不能不要直接下载文件,而是预览?
这就跟文件的元数据参数Content-Type的值有关了。
Content-Type用于标识发送或接收数据的类型,浏览器根据该参数来决定数据的打开方式。Content-Type多用于指定一些客户端自定义的文件,以及一些媒体文件的打开方式,比如image/png、 image/jpg 是图片类型,video/mpeg、 video/mp4是视频类型,text/plain、 text/html是文本类型, 浏览器针对不同的Content-Type会有不同的操作,比如图片类型可以预览,视频类型可以播放,文本类型可以直接打开。而如果Content-Type是binary/octet-stream类型会进行下载。
在控制台对应文件的详情页面,可以看到文件的Content-Type值,如下图的文件URL就是直接进行下载。
那我们如何指定文件的Content-Type呢?
有两个办法:
- 在上传文件的时候,指定文件的Content-Type值;
- linux环境可以通过s3cmd命令修改文件的Content-Type值;
上传文件指定Content-Type
通过控制台上传文件,控制台会自动识别文件类型,设置Content-Type为对应的值,如果是无法识别的类型,就会设置为binary/octet-stream。当然,也可以人为进行设置:点击“上传文件”后,点击“设置对象属性”-“添加参数”,填写Content-Type的值。
如果是通过存储的SDK进行上传,那么就要注意了:SDK默认的Content-Type值为binary/octet-stream,所以这也是很多用户通过SDK上传的文件不能进行预览的原因。
这就需要用户使用SDK上传时,指定Content-Type为对应的值,相关使用说明可以查看官网的SDK使用章节,以python SDK为例如下图所示:
已经上传的文件修改Content-Type的办法:
- 重新上传文件,上传时指定对应Content-Type的值;
- linux环境可以使用s3cmd工具修改Content-Type的值。
PS:s3cmd为业界通用工具,可网上搜索具体使用方法。
配置s3cmd工具以后,可以使用如下命令进行修改:
s3cmd --mime-type=image/jpeg --recursive --exclude=* --include=*.jpeg modify s3://桶名
--include=后面为指定文件名,也可以模糊匹配文件后缀进行批量修改。