You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:48:35