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