一个完整的文件文件夹上传到亚马逊S3特定的文件夹(Uploading a folder full o

2019-09-29 22:16发布

已经有这样的一些其他问题,但没有一个似乎已经明确回答了我的问题。 我有一个完整的我要上传到Amazon S3的文件文件夹,我曾尝试过各种不同的东西,所有这些都导致没有上传。 这是我现在的代码。 它成功地创建了S3的文件夹,但不会上传。

import os
import boto3

s3_bucket = 'bucketname'
s3_bucket_region = 'us-east-1'
folder = 'FolderName'

key_name = folder + '/' 
s3_connect = boto3.client('s3', s3_bucket_region)
try:
    bucket = s3_connect.put_object(Bucket=s3_bucket, Key=key_name)
    print "Bucket:", bucket
except Exception as e:
    print "Bucket Error " , e

# upload File to S3
for filename in os.listdir(folder):

    file_key_name = folder + '/' + filename
    local_path = os.getcwd()
    local_name = local_path + '/' + key_name + filename
    upload = s3_connect.upload_file(local_name, s3_bucket, file_key_name)

我已经试过的只是类似“文件夹名/”以及“文件夹名/文件名”一file_key_name。 我想首先第一个参数(LOCAL_NAME)并不需要一个完整的路径,而是相对路径的工作,但既不是完整或相对路径工作。

我在想什么? 该文档是相当极度缺乏在这个部门。 再加上它不会引发错误,它只是不上传。

Answer 1:

您的代码工作对我来说完全没有问题,但你需要删除创建在Amazon S3上的文件夹中的try / catch部分

亚马逊S3实际上并不支持文件夹。 相反, Key的对象的包括全路径(例如images/foo.jpg )。 因此,你不需要存储他们的文件之前创建的文件夹(因为它们不存在!)。

您的代码将与嵌套文件夹的困难。 你可能会考虑使用aws s3 syncaws s3 cp在命令AWS命令行界面(CLI) ,如果你不需要它写在自己的代码做。



文章来源: Uploading a folder full of files to a specific folder in Amazon S3