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

问题描述 投票:0回答:1

还有一些其他类似的问题,但似乎没有一个具体回答我的问题。我有一个充满要上传到 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-web-services python-2.7 amazon-s3 boto3
1个回答
3
投票

您的代码对我来说工作得很好,但您需要删除在 Amazon S3 上创建文件夹的 try/catch 部分。

Amazon S3 实际上并不支持文件夹。相反,对象的

Key

 包含完整路径(例如 
images/foo.jpg
)。因此,在将文件存储在其中之前,您不需要创建文件夹(因为它们不存在!)。

您的代码在处理嵌套文件夹时会遇到困难。如果您不需要用自己的代码编写,您可以考虑使用

AWS 命令行界面 (CLI)

 中的 
aws s3 sync
aws s3 cp 命令。

© www.soinside.com 2019 - 2024. All rights reserved.