https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html
使用文档中提供的代码,我尝试遍历parent_dir,如果有一个zip文件,则要将其复制到我的S3存储桶中。
我都尝试过
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
和
s3 = boto3.client('s3')
with open("FILE_NAME", "rb") as f:
s3.upload_fileobj(f, "BUCKET_NAME", "OBJECT_NAME")
,但是他们两个都给出了相同的错误。
s3_client = boto3.client(
's3',
aws_access_key_id='MY_KEY_ID',
aws_secret_access_key='MY_ACCESS_KEY'
)
session = boto3.Session(
aws_access_key_id='MY_KEY_ID',
aws_secret_access_key='MY_ACCESS_KEY',
)
s3 = session.resource('s3')
bucket = s3.Bucket('MY_URL')
for file in os.listdir(parent_dir):
if object_name is None:
object_name = file
if file.endswith('.zip'):
with open(file, "rb") as f:
s3_client.upload_fileobj(f, bucket, object_name)
TypeError: expected string or bytes-like object
答案 0 :(得分:2)
根据[AmazonAWS.Boto3]: S3.Client - upload_fileobj(Fileobj, Bucket, Key, ExtraArgs=None, Callback=None, Config=None),第2 nd 和3 rd 自变量( Bucket 和 Key )必须为字符串。
但是您传递的是2 nd 参数:
bucket = s3.Bucket('MY_URL')
这不是确定。将其设置为纯字符串(甚至更好,将其重命名):
bucket_name = "MY_URL"
并将其传递给 upload_fileobj ,您应该可以解决此问题。