最近在项目开发中需要支持存储在COS中的文件下载下来时能支持产品定义的命名规则,而且文件名包含中文,先前开发把文件名重命名后直接存储到COS中,但后来发现带中文链接的文件下载在IPHONE手机或Safira浏览器环境下下载下来文件名是乱码的。这里将介绍通过设置Header来实现指定文件名和文件类型的下载行为,通过这个方法可以实现从COS下载的文件指定特定文件名及文件类型

说明

归档存储、深度归档存储类型的对象,仅支持在上传时设置自定义 Headers,不支持对已上传的对象设置自定义 Headers。

操作步骤

  1. 登录 对象存储控制台

  2. 在左侧导航栏中,单击存储桶列表,进入存储桶列表页面。

  3. 找到对象所在的存储桶,单击其存储桶名称,进入存储桶管理页面。

  4. 在左侧导航栏中,选择文件列表,进入文件列表页面。

  5. 找到需要自定义头部的对象,在其右侧操作栏中,单击更多 > 自定义头部进行设置。若您需要对多个对象自定义头部,可勾选多个对象,并单击上方的更多操作 > 自定义头部进行设置。

  6. 在弹出的窗口中,选择需要设置的元数据头部参数类型,输入对应的元数据值,单击确定即可。 COS 提供了以下6种对象 HTTP 头部标识供配置。头部配置说明如下:

HTTP 头部 说明 示例
Content-Type 文件的 MIME 信息 image/jpeg
Cache-Control 文件的缓存机制 no-cache:不可直接使用缓存,而是先到服务端验证 Object 是否已更新。如果 Object 已更新,表明缓存已过期,需从服务端重新下载 Object;如果 Object 未更新,表明缓存未过期,此时将使用本地缓存。max-age=200:缓存内容的相对过期时间,单位为秒。
Content-Disposition MIME 协议的扩展 attachment; filename=“example.txt”。如果附件名为中文,则需要经过 URL 编码,示例为attachment; filename* = UTF-8' '%E4%B8%AD%E6%96%87.txt
Content-Encoding 文件的编码格式 gzip
Expires 用来控制缓存的失效日期 Wed, 21 Oct 2015 07:28:00 GMT
x-cos-meta-[自定义后缀] 用户自定义内容 x-cos-meta-via: homepage**注意:**头部名称仅支持减号(-)、数字、英文(a~z)。英文字符的大写字母会被转成小写字母,不支持下划线(_)在内的其他字符。

示例

在 APPID 为 1250000000,创建存储桶名称为 examplebucket-1250000000。存储桶根目录下上传了对象 exampleobject.txt。

未自定义对象的 HTTP 头部时,浏览器或客户端下载时得到的对象头部范例如下:

请求

1
2
3
4
5
GET /exampleobject.txt HTTP/1.1
Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.com
Date: Fri, 10 Apr 2020 09:35:16 GMT
Authorization: q-sign-algorithm=sha1&q-ak=AKID8A0fBVtYFrNm02oY1g1JQQF0c3JO****&q-sign-time=1586511316;1586518516&q-key-time=1586511316;1586518516&q-header-list=date;host&q-url-param-list=&q-signature=1bd1898e241fb978df336dc68aaef4c0acae****
Connection: close

响应

1
2
3
4
HTTP/1.1 200 OK
Content-Type: text/plain
Access-Control-Allow-Origin: *
Last-Modified: Fri, 10 Apr 2020 09:35:05 GMT 

添加如下配置:

参数
Content-Type image/jpeg
Cache-Control no-cache
Content-Disposition attachment; filename* = UTF-8’ ‘%E4%B8%AD%E6%96%87.jpeg
x-cos-meta-md5 1234

再次发起请求,浏览器或客户端得到的对象头部范例如下:

请求

1
2
3
4
5
GET /exampleobject.txt HTTP/1.1
Host: examplebucket-1250000000.cos.ap-beijing.myqcloud.com
Date: Fri, 10 Apr 2020 09:35:16 GMT
Authorization: q-sign-algorithm=sha1&q-ak=AKID8A0fBVtYFrNm02oY1g1JQQF0c3JO****&q-sign-time=1586511316;1586518516&q-key-time=1586511316;1586518516&q-header-list=date;host&q-url-param-list=&q-signature=1bd1898e241fb978df336dc68aaef4c0acae****
Connection: close

响应

1
2
3
4
5
6
7
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Type: image/jpeg
Content-Disposition: attachment; filename* = UTF-8' '%E4%B8%AD%E6%96%87.jpeg
x-cos-meta-md5: 1234
Access-Control-Allow-Origin: *
Last-Modified: Fri, 10 Apr 2020 09:35:05 GMT 

参考文章:

https://cloud.tencent.com/document/product/436/13361