使用boto3上传zip到AWS S3后文件损坏无法解压的问题求助
问题根因
你上传代码中错误配置了ContentEncoding: "base64"参数,这是导致下载文件损坏、无法解压的直接原因。
ContentEncoding字段的作用是告知S3当前上传的内容使用了指定编码做过转换,S3存储时会自动按对应编码反向解码后存储原始内容。你上传的是原生二进制ZIP文件,没有经过Base64编码处理,S3强行执行Base64解码操作后会破坏原文件的二进制结构,最终导致下载后的文件无法正常解压。
直接修复方案
删除ExtraArgs中的"ContentEncoding": "base64"配置项即可,修改后的核心代码参考:
file = request.files["my_zip_file"] # file obj (multipart / form-data) s3.upload_fileobj( file, BUCKET_NAME, folder_name, ExtraArgs={ "ContentType": file.content_type } )
通用排查步骤
- 对比本地原始文件和S3下载文件的MD5/SHA256哈希值,不一致即可直接判定上传/存储环节文件被篡改
- 排查上传时的所有自定义Header配置,确认
ContentEncoding、ContentDisposition等会影响S3文件处理逻辑的参数,和实际上传的文件属性匹配 - 先将待上传的文件对象存储到本地做一次解压测试,排除原始上传文件本身损坏的可能性
- 直接通过S3控制台上传同一个ZIP文件,下载后测试解压是否正常,如果正常即可锁定问题出在代码上传环节的配置上
内容的提问来源于stack exchange,提问作者John doe
相关产品推荐
相关产品推荐

