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

如何将.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:03:12