Python 2.7 将装满文件的文件夹上载到AmazonS3中的特定文件夹

Python 2.7 将装满文件的文件夹上载到AmazonS3中的特定文件夹,python-2.7,amazon-s3,boto3,Python 2.7,Amazon S3,Boto3,还有一些其他类似的问题,但似乎没有一个能具体回答我的问题。我有一个文件夹,里面装满了我想上传到AmazonS3的文件,我尝试了各种不同的方法,结果都没有上传。这是我现在的密码。它成功地在S3上创建了文件夹,但没有上传 import os import boto3 s3_bucket = 'bucketname' s3_bucket_region = 'us-east-1' folder = 'FolderName' key_name = folder + '/' s3_connect =

还有一些其他类似的问题,但似乎没有一个能具体回答我的问题。我有一个文件夹,里面装满了我想上传到AmazonS3的文件,我尝试了各种不同的方法,结果都没有上传。这是我现在的密码。它成功地在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”的文件名。起初我认为第一个参数(local_name)不需要完整路径,但是相对路径可以工作,但是完整路径和相对路径都不能工作


我错过了什么?这个部门很缺医生。另外,它不会抛出错误,只是不会上传。

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

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)
AmazonS3实际上不支持文件夹。相反,对象的
键包含完整路径(例如
images/foo.jpg
)。因此,在存储文件之前不需要创建文件夹(因为它们不存在!)


您的代码将难以处理嵌套文件夹。如果您不需要用自己的代码编写,则可以考虑使用<代码> AWS S3同步/<代码> AWS S3Cp命令。这使用了boto库,我使用的是boto3。糟糕,你试过文档中的3个例子了吗?它们都调用
boto3.resource
,而不是
boto3.client
。这是bucket一:这是object一:使用客户机(不确定是否与您的客户机相同):您是否考虑过简单地使用?有一个
aws s3 sync
命令,可以用一个命令复制目录层次结构。就是这样。谢谢幸运的是,我不需要嵌套文件夹,只需要一个。而且它是更大应用程序的一部分,所以它必须是python的。