AWS SDK for Golang GetObjectRequest:超200字符文件名被截断,咨询长度限制
AWS SDK for Go GetObjectRequest 长文件名截断问题解答
文件名长度限制说明
HTTP标准本身并未强制限制Content-Disposition头中filename字段的长度,但AWS S3在预签名URL场景下对自定义响应头存在明确的长度限制:
- 当通过
GetObjectRequest设置ResponseContentDisposition并生成预签名URL时,该头的总长度(包括filename字段及编码内容)会被S3限制在阈值范围内,实际场景中超过200字符的原文件名经UTF-8编码后,极易触发截断逻辑。 - 直接通过SDK调用
GetObject本地下载时,S3会完整返回响应头,服务端通过SDK解析后可获取完整文件名,因此不会出现截断情况。
预签名URL截断的核心原因
预签名URL的生成过程会将自定义响应头(如ResponseContentDisposition)纳入签名计算,S3对参与签名的请求参数总长度有严格限制。同时,filename通常会以filename*=UTF-8''<encoded-name>的格式传输,编码后的长度远大于原字符长度,这会导致原本200字符的文件名编码后超出S3的允许范围,最终被截断。
可行解决方案
- 将完整文件名存储在S3对象的自定义元数据中(如
x-amz-meta-original-filename),客户端通过预签名URL下载后,从响应头的元数据字段提取完整文件名进行保存。 - 对长文件名进行短化处理(如哈希、截断+后缀标识),将短文件名放入
ResponseContentDisposition,同时在元数据中保留原文件名,兼顾预签名URL的可用性和原文件名的完整性。
内容的提问来源于stack exchange,提问作者Anjusha Joshi
相关产品推荐
相关产品推荐

