还有其他一些问题,但似乎没有一个问题具体回答我的问题。我有一个文件夹,里面有我要上传到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)不需要完整路径,但是相对路径可以工作,但是完整路径或相对路径都不起作用。
我错过了什么?这个部门的文档非常糟糕。此外,它不会抛出错误,它只是不上传。
答案 0 :(得分:1)
您的代码对我来说非常合适,但您需要删除在Amazon S3上创建文件夹的try / catch部分。
Amazon S3实际上不支持文件夹。相反,对象的Key
包括完整路径(例如images/foo.jpg
)。因此,在将文件存储到文件夹之前不需要创建文件夹(因为它们不存在!)。
您的代码在嵌套文件夹中会遇到困难。如果您不需要在自己的代码中编写,可以考虑使用AWS Command-Line Interface (CLI)中的aws s3 sync
或aws s3 cp
命令。