AWS S3上传.tgs文件后下载变为.gz归档问题求助
解决S3下载.tgs文件变为.gz包的问题
问题根源在于.tgs文件本质是gzip压缩格式的贴纸文件,若上传时未正确设置元数据,S3会将其识别为普通gzip归档,导致下载时被解析成.gz包。以下是具体解决方法:
1. 上传时指定正确的文件元数据
修改服务端生成签名URL的参数,添加ContentEncoding并确保ContentType为.tgs的标准类型:
const params = { Bucket: `${process.env.AWS_FOLDER_NAME}/${bucketName}`, Key: fileName, // 确保fileName包含.tgs扩展名 ContentType: 'application/x-tgsticker', // 明确指定.tgs的MIME类型 ContentEncoding: 'gzip', // 标识文件为gzip压缩格式 ACL:'public-read' } const signedUrl = s3.getSignedUrl('putObject', params) return signedUrl
同时修改客户端请求头,同步添加Content-Encoding:
const {signedUrl, err} = await response.json() await fetch(signedUrl, { method: 'PUT', body: file.body, headers: { 'Content-Type': 'application/x-tgsticker', 'Content-Encoding': 'gzip', 'x-amz-acl': 'public-read', }}) .catch(err => { console.log(err) })
注意:如果你的
fileType变量是动态获取的,需要确保对.tgs文件返回application/x-tgsticker,而不是让系统自动识别为application/gzip。
2. 修复已上传的.tgs文件
对于已经上传到S3的问题文件,可通过控制台手动修改元数据:
- 登录AWS S3控制台,找到目标.tgs文件
- 右键选择修改元数据
- 添加/更新以下键值对:
- 键:
Content-Type,值:application/x-tgsticker - 键:
Content-Encoding,值:gzip
- 键:
- 保存设置后重新下载文件即可恢复正常
3. 验证FileReader逻辑
你的FileReader使用readAsArrayBuffer读取文件是正确的,无需修改,该方式能保证二进制文件的完整上传。
内容的提问来源于stack exchange,提问作者Artem Ermakov
相关产品推荐
相关产品推荐

