2017-10-12 22 views
0

をアップロード:インメモリzipファイルは、私はメモリ内のzipファイルを作成し、次のようにS3にアップロード午前0 Bオブジェクト

def upload_script(s3_key, file_name, script_code): 
    """Upload the provided script code onto S3, and return the key of uploaded object""" 
    bucket = boto3.resource('s3').Bucket(config.AWS_S3_BUCKET) 
    zip_file = BytesIO() 
    zip_buffer = ZipFile(zip_file, "w", ZIP_DEFLATED) 
    zip_buffer.debug = 3 
    zip_buffer.writestr("{}.py".format(file_name), script_code) 
    for zfile in zip_buffer.filelist: 
     zfile.create_system = 0 
    zip_buffer.close() 
    upload_key = "{}/{}_{}.zip".format(s3_key, file_name, TODAY()) 
    print zip_buffer.namelist(), upload_key 
    bucket.upload_fileobj(zip_file, upload_key) 
    return upload_key 

テスト実行のために次のようにプリントし、戻り値は次のとおり

['s_o_me.py'] a/b/s_o_me_20171012.zip 
a/b/s_o_me_20171012.zip 

テストスクリプトは、単純なPythonのラインです:

print upload_script('a/b', 's_o_me', "import xyz") 
ファイルがS3バケット内に作成されている

、彼らはあります0Bのサイズです。バッファが正しく書き込まれたりアップロードされないのはなぜですか?

答えて

1

さらに操作を進める前に、BytesIOオブジェクトの0番目のインデックスを検索する必要があります。

zip_file.seek(0) 
bucket.upload_fileobj(zip_file, upload_key) 

完璧に動作します:へのスニペットを変更

関連する問題