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

使用smart_open流式下载HTTP的.gz文件并上传S3失败,求排查

问题分析与修正方案

核心错误

代码里存在一个致命的逻辑错误:你在写入S3时调用了fout.write(chunk_size),这会把chunk_size的数值(16777216)重复写入文件,而不是写入从HTTP流读取到的实际文件内容buf。这是导致代码无法正常工作的直接原因。

其他潜在问题与优化建议

  • S3权限配置:确保smart_open能正确访问你的S3存储桶,可通过环境变量、~/.aws/credentials配置文件,或者在s3://路径的transport_params中显式传入AWS密钥参数。
  • 传输参数优化:针对大文件流式上传,可给S3写入添加transport_params配置,比如设置分片上传相关参数提升效率。
  • 异常处理:建议添加异常捕获逻辑,处理网络中断、权限不足等可能出现的异常情况。

修正后的代码

from smart_open import open as sopen

chunk_size = 16 * 1024 * 1024  # 16MB 分片大小
http_url = 'http://someurl'

with sopen(http_url, 'rb', transport_params={'headers': {'Subscription-Key': 'somekey'}}) as fin:
    # 若需指定AWS凭证,可添加transport_params参数,示例:
    # transport_params={'client_kwargs': {'aws_access_key_id': '你的密钥ID', 'aws_secret_access_key': '你的密钥'}}
    with sopen('s3://bucket/filename.txt.gz', 'wb') as fout:
        while True:
            buf = fin.read(chunk_size)
            if not buf:
                break
            fout.write(buf)  # 修正为写入读取到的实际内容buf

内容的提问来源于stack exchange,提问作者ffi23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:24:59