如何将.2D文件从网页复制到S3存储桶?解码失败求助
.2D(VERSACAD格式)文件上传S3失败的解决方法
问题场景
将网站文件同步到S3存储桶时,绝大多数文件(包括各类罕见扩展名文件)都能正常处理,但**.2D扩展名的VERSACAD格式文件**始终报错。原代码在执行r.data.decode("utf-8")时解码失败,尝试切换为utf-16编码也无法解决。
原错误代码
文件处理逻辑:
data=r.data.decode("utf-8") key_path="downloaded_docs/{0}/{1}/{2}/{3}".format(year,str(month).zfill(2),str(day).zfill(2),docname)
S3保存代码:
s3.Object('s3_bucket_name',key_path).put(Body=data)
问题根源
.2D是VERSACAD生成的二进制CAD文件,并非纯文本格式。强行用utf-8/utf-16等文本编码解码二进制数据,必然会出现解码错误,同时破坏文件原始结构。
解决方法
针对.2D文件,直接以二进制形式读取并上传,跳过文本解码步骤:
import io if extracted_link.endswith('.2D'): r = http.request("GET", url_to_file, preload_content=False) # 直接获取二进制响应数据 text_b = r.data filepath = "<你的S3对象键路径>" # 替换为实际路径,如之前的key_path格式 s3_client.upload_fileobj(io.BytesIO(text_b), Bucket="<你的存储桶名称>", Key=filepath)
说明
通过io.BytesIO将二进制数据包装为文件对象,再调用S3客户端的upload_fileobj方法直接上传,既避免了解码错误,又保证了二进制文件的完整性。
内容的提问来源于stack exchange,提问作者Jennifer Crosby
相关产品推荐
相关产品推荐

