将装满文件的文件夹上传到Amazon S3中的特定文件夹

时间:2017-04-13 18:41:14

标签: python-2.7 amazon-s3 boto3

还有其他一些问题,但似乎没有一个问题具体回答我的问题。我有一个文件夹,里面有我要上传到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)

我尝试过类似'FolderName /'以及'FolderName / FileName'之类的file_key_name。我一开始认为第一个参数(local_name)不需要完整路径,但是相对路径可以工作,但是完整路径或相对路径都不起作用。

我错过了什么?这个部门的文档非常糟糕。此外,它不会抛出错误,它只是不上传。

1 个答案:

答案 0 :(得分:1)

您的代码对我来说非常合适,但您需要删除在Amazon S3上创建文件夹的try / catch部分。

Amazon S3实际上不支持文件夹。相反,对象的Key包括完整路径(例如images/foo.jpg)。因此,在将文件存储到文件夹之前不需要创建文件夹(因为它们不存在!)。

您的代码在嵌套文件夹中会遇到困难。如果您不需要在自己的代码中编写,可以考虑使用AWS Command-Line Interface (CLI)中的aws s3 syncaws s3 cp命令。