【问题标题】:How to upload multiple files(20K+) to AWS S3如何将多个文件(20K+)上传到 AWS S3
【发布时间】:2014-04-01 20:59:07
【问题描述】:

如何将多个文件上传到 AWS S3?

我尝试了两种方法,都失败了:

1)s3cmd 显示以下错误,即使文件只有 270KB。

   $s3cmd put file_2012_07_05_aa.gz  s3://file.s3.oregon/
   file_2012_07_05_aa.gz -> s3://file.s3.oregon/file_2012_07_05_aa.gz  [1 of 1]
   45056 of 272006    16% in    1s    25.62 kB/s  failed
   WARNING: Upload failed: /file_2012_07_05_aa.gz ([Errno 32] Broken pipe)
   WARNING: Retrying on lower speed (throttle=0.00)
   WARNING: Waiting 3 sec...

2) 使用boto的S3接口。

只有当我使用“美国标准”创建存储桶时,boto 库才能正常工作,如果我选择俄勒冈等其他地区,它将失败并显示“对等连接重置”

def connect_to_s3(access_key, secret_key):
    conn = S3Connection(access_key, secret_key)
    return conn


def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()

def upload_to_s3(bucket, file_name):
    key = bucket.new_key(file_name)
    key.set_contents_from_filename(file_name,cb=percent_cb, num_cb=10)

【问题讨论】:

    标签: amazon-web-services amazon-s3 boto s3cmd


    【解决方案1】:

    您也可以使用Minio Client aka mc

    使用mc mirror这个可以实现

    $ mc 镜像 localdir S3alias/remotebucket

    如果由于网络问题或节流断开连接,Minio Client 会从上次离开的位置开始上传。

    mc:会话安全终止。恢复会话'mc session resume yarbWRwf'

    希望对你有帮助。

    Dasclaimer:我为Minio工作

    【讨论】:

      【解决方案2】:

      过去,当 socket_timeout 值太低时,会发生断管错误。请检查您的 ~/.s3cfg 文件以确保已设置 socket_timeout = 300。

      默认值已从 10 秒更改为 300 秒:

      commit b503566c362c81dc8744a569820461c1c39bacae
      Author: Michal Ludvig <mludvig@logix.net.nz>
      Date:   Mon Apr 11 02:01:08 2011 +0000
      * S3/Config.py: Increase socket_timeout from 10 secs to 5 mins.
      

      【讨论】:

        【解决方案3】:

        我个人最喜欢的解决方案是使用 Cyber​​Duck。您使用 S3 API 密钥凭据登录,它就像文件系统浏览器一样工作。如果你用你的 20000 个文件拖动你的文件夹,它会像这样上传它们。下载同样简单。

        【讨论】:

          猜你喜欢
          • 2022-11-03
          • 2016-08-07
          • 2017-09-25
          • 2018-07-07
          • 2016-10-17
          • 2020-05-26
          • 1970-01-01
          • 1970-01-01
          • 2021-05-01
          相关资源
          最近更新 更多