如何将多个文件上传到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界面。
只有当我使用" US Standard"创建存储桶时,boto库才能正常工作,如果我选择其他地区如俄勒冈州,它将失败并显示"连接重置为#34 ;
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)
答案 0 :(得分:2)
或者您可以使用Minio Client aka mc
使用mc镜像可以实现
$ mc mirror localdir S3alias/remotebucket
如果由于网络问题或限制断开连接,Minio Client将从最后一次开始上传。
mc: Session safely terminated. To resume session ‘mc session resume yarbWRwf’
希望它有所帮助。
Dasclaimer:我为Minio
工作答案 1 :(得分:1)
当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.
答案 2 :(得分:0)
我个人最喜欢的解决方案是使用CyberDuck。您使用S3 API密钥凭据登录,它就像文件系统资源管理器一样工作。如果您使用20000文件拖动文件夹,它将像这样上传它们。下载也很简单。