web-dev-qa-db-ja.com

boto3を使用してS3の特定のフォルダーにファイルをアップロードする

私のコードですべてが動作します。現在直面している唯一の落とし穴は、ファイルを配置したいS3バケット内のフォルダーを指定できないことです。

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename)

私は両方を試しました:

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename)

そして:

s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename)

誰かがこれを特定のフォルダに向ける方法についてのヒントをお持ちの場合(これが可能な場合)、お知らせください!

13
Alex

Key値を絶対パスとして渡す必要はありません。以下が機能するはずです。

upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
30
hjpotter92

私は問題を見つけました。私は/folder/オプションはキーパラメータエリアにありますが、最初の/ 皆さん、ありがとうございました!これは、上記のhjpotter92の提案と本質的に同じ考えです。

3
Alex

これをpython 3.xに使用します

s3.upload_file(file_path,bucket_name, '%s/%s' % (bucket_folder,dest_file_name))
0
Andrew Figaroa

ネストされたディレクトリ構造を処理し、botoを使用して完全なディレクトリをアップロードできる方法を次に示します。

def upload_directory():
    for root, dirs, files in os.walk(settings.LOCAL_SYNC_LOCATION):
        nested_dir = root.replace(settings.LOCAL_SYNC_LOCATION, '')
        if nested_dir:
            nested_dir = nested_dir.replace('/','',1) + '/'

        for file in files:
            complete_file_path = os.path.join(root, file)
            file = nested_dir + file if nested_dir else file
            print "[S3_UPLOAD] Going to upload {complete_file_path} to s3 bucket {s3_bucket} as {file}"\
                .format(complete_file_path=complete_file_path, s3_bucket=settings.S3_BUCKET, file=file)
            s3_client.upload_file(complete_file_path, settings.S3_BUCKET, file)
0
Suyash Soni