在项目开发中,经常需要支持从腾讯云COS下载文件时指定特定的文件名,特别是包含中文字符的文件名。直接重命名文件存储到COS可能导致在iPhone或Safari浏览器中下载时出现乱码问题 📱。
本文将介绍通过设置自定义Headers来解决这个问题,实现指定文件名和文件类型的下载行为。
⚠️ 重要说明
归档存储、深度归档存储类型的对象,仅支持在上传时设置自定义Headers,不支持对已上传的对象设置自定义Headers。
🚀 操作步骤
进入COS控制台
登录 对象存储控制台。
在左侧导航栏中,单击存储桶列表,进入存储桶列表页面。
找到对象所在的存储桶,单击其存储桶名称,进入存储桶管理页面。
在左侧导航栏中,选择文件列表,进入文件列表页面。
-
找到需要自定义头部的对象,在其右侧操作栏中,单击更多 > 自定义头部进行设置。若您需要对多个对象自定义头部,可勾选多个对象,并单击上方的更多操作 > 自定义头部进行设置。
-
在弹出的窗口中,选择需要设置的元数据头部参数类型,输入对应的元数据值,单击确定即可。 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 头部时,浏览器或客户端下载时得到的对象头部范例如下:
请求
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
响应
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 |
再次发起请求,浏览器或客户端得到的对象头部范例如下:
请求
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
响应
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
参考文章: