2016-06-30 6 views
1

この質問のコードを使用してS3バケットにファイルをアップロードしようとしています:https://stackoverflow.com/a/15087468/291372。私はboto2を使用しています(boto3にはあまりにも多くの依存関係があります)。私は多くの方法を試みましたが、誰も私のために働いていません。 CORSはバケットをチェックし、ここで「*」Boto2ファイルのアップロードでConnectionResetErrorが発生する

から起源を許可するように設定された私のコードです:

# -*- coding: utf-8 -*- 

import boto 
import boto.s3 
import sys 
from boto.s3.key import Key 


AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXX' 
AWS_SECRET_ACCESS_KEY = 'YYYYYYYYYYYYYYYYYYYYYy' 
S3_BUCKET = 'ZZZZZZZZZZZZZZZZZZZZZZ' 

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
bucket = conn.get_bucket(S3_BUCKET) 

testfile = "test.jpg" 
print('{}: Uploading {} to Amazon S3 bucket {}'.format(datetime.now().time().isoformat(), testfile, S3_BUCKET)) 

def percent_cb(complete, total): 
    print(datetime.now().time().isoformat(), complete, total) 
# sys.stdout.write('.') 
# sys.stdout.flush() 


k = Key(bucket) 
k.key = 'my test file' 
k.set_contents_from_filename(testfile, cb=percent_cb, num_cb=5) 

そして、ここでは、私は、コンソールで見ることができる結果である。

19:40:19.760703: Uploading test.jpg to Amazon S3 bucket pickettagent-phase2 
19:40:21.394796 0 85937 
19:40:22.061834 24576 85937 
19:40:24.235959 0 85937 
19:40:24.973001 24576 85937 
19:40:27.542148 0 85937 
19:40:30.110295 0 85937 
19:40:38.648783 0 85937 
19:40:49.520405 0 85937 
19:41:12.959745 0 85937 
19:41:13.644785 24576 85937 
Traceback (most recent call last): 
...... 
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host 

時には最初の列(complete)にはゼロのみが含まれています。それは第二にアップロードする必要がありますので、私がアップロードしようとしているそのコードが例外で失敗

ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

ファイルは、85KB程度ですが、(最初から例外まで)実際に全体のプロセスには約40〜60秒かかります。

私は他のソリューション(tinys3、フラスコs3、フラスコアップロード)を試みましたが、何も動作しませんでした!

S3バケットにファイルをアップロードするにはどうすればよいですか?たぶん私は何らかのパーミッションを見逃したでしょうか?

答えて

1

(1メガバイト>それらのほとんどがある)私はたくさんのファイルをアップロードするためにそれを使用しています、このコードを試してみてください。

from boto.s3.connection import S3Connection 
from contextlib import contextmanager 

@contextmanager 
def connect_to_s3(): 
    conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 

    try: 
     yield conn 
    finally: 
     conn.close() 

with connect_to_s3() as conn: 
    bucket = conn.get_bucket(S3_BUCKET) 
    key = bucket.new_key() 
    key.set_contents_from_filename(file_name, cb=percent_cb, num_cb=5) 
関連する問題