使用boto3将文件上传到Amazon S3存储桶中的特定位置?

时间:2019-01-22 12:36:14

标签: python amazon-s3 boto3

我正在尝试将一些文件上传到Amazon S3。我可以将文件上传到存储桶中。但是,该文件的名称必须为my-bucket / Folder1 / Folder2。

import boto3
from boto.s3.key import Key
session = boto3.Session(aws_access_key_id=AWS_ACCESS_KEY_ID, 
aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
bucket_name = 'my-bucket-name'
prefix = 'Folder1/Folder2'
s3 = session.resource('s3')
bucket = s3.Bucket(bucket_name)
objs = bucket.objects.filter(Prefix=prefix)

我尝试使用此代码上传到存储桶并成功:

s3.meta.client.upload_file('C:/hello.txt', bucket, 'hello.txt')

当我尝试使用此代码将同一文件上传到指定的Folder2时,失败并出现错误:

s3.meta.client.upload_file('C:/hello.txt', objs, 'hello.txt')

ERROR>>>
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid bucket name "s3.Bucket.objectsCollection(s3.Bucket(name='my-bucket-name'), s3.ObjectSummary)": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"

那么,如何将文件上传到我的存储桶名称文件夹1 /文件夹2中?

1 个答案:

答案 0 :(得分:0)

  

s3.meta.client.upload_file('C:/hello.txt',objs,'hello.txt')

这里发生的是client.upload_file的bucket参数必须是字符串形式的bucket名称

对于特定文件夹

  

upload_file('C:/hello.txt',bucket,'Folder1 / Folder2 / hello.txt')