使用boto3将文件上传到S3中的特定文件夹
uploading file to specific folder in S3 using boto3
我的代码一切正常。我目前面临的唯一陷阱是我无法在 S3 存储桶中指定我想要放置文件的文件夹。这是我所拥有的:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename)
我都试过了:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename)
和:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename)
如果有人对如何将其定向到特定文件夹有任何提示(如果可能的话),请告诉我!
您不需要将键值作为绝对路径传递。以下应该有效:
upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
我想通了我的问题。我在关键参数区域中使用 /folder/
选项的想法是正确的,但是,我不需要第一个 /
谢谢大家!这与上面hjpotter92的建议基本相同。
这是处理嵌套目录结构的方法,并且能够使用 boto
上传完整目录
def upload_directory():
for root, dirs, files in os.walk(settings.LOCAL_SYNC_LOCATION):
nested_dir = root.replace(settings.LOCAL_SYNC_LOCATION, '')
if nested_dir:
nested_dir = nested_dir.replace('/','',1) + '/'
for file in files:
complete_file_path = os.path.join(root, file)
file = nested_dir + file if nested_dir else file
print "[S3_UPLOAD] Going to upload {complete_file_path} to s3 bucket {s3_bucket} as {file}"\
.format(complete_file_path=complete_file_path, s3_bucket=settings.S3_BUCKET, file=file)
s3_client.upload_file(complete_file_path, settings.S3_BUCKET, file)
将此用于 python 3.x
s3.upload_file(file_path,bucket_name, '%s/%s' % (bucket_folder,dest_file_name))
您可以使用 put_object
代替 upload_file
:
file = open(r"/tmp/" + filename)
response = s3.meta.client.Bucket('<bucket-name>').put_object(Key='folder/{}'.format(filename), Body=file)
试一试:
s3.meta.client.upload_file(Filename=filename_and_full_path, Bucket=my_bucket, Key=prefix_key_plus_filename_only)
我的代码一切正常。我目前面临的唯一陷阱是我无法在 S3 存储桶中指定我想要放置文件的文件夹。这是我所拥有的:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', filename)
我都试过了:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>/folder/', filename)
和:
s3.meta.client.upload_file('/tmp/'+filename, '<bucket-name>', '/folder/'+filename)
如果有人对如何将其定向到特定文件夹有任何提示(如果可能的话),请告诉我!
您不需要将键值作为绝对路径传递。以下应该有效:
upload_file('/tmp/' + filename, '<bucket-name>', 'folder/{}'.format(filename))
我想通了我的问题。我在关键参数区域中使用 /folder/
选项的想法是正确的,但是,我不需要第一个 /
谢谢大家!这与上面hjpotter92的建议基本相同。
这是处理嵌套目录结构的方法,并且能够使用 boto
上传完整目录def upload_directory():
for root, dirs, files in os.walk(settings.LOCAL_SYNC_LOCATION):
nested_dir = root.replace(settings.LOCAL_SYNC_LOCATION, '')
if nested_dir:
nested_dir = nested_dir.replace('/','',1) + '/'
for file in files:
complete_file_path = os.path.join(root, file)
file = nested_dir + file if nested_dir else file
print "[S3_UPLOAD] Going to upload {complete_file_path} to s3 bucket {s3_bucket} as {file}"\
.format(complete_file_path=complete_file_path, s3_bucket=settings.S3_BUCKET, file=file)
s3_client.upload_file(complete_file_path, settings.S3_BUCKET, file)
将此用于 python 3.x
s3.upload_file(file_path,bucket_name, '%s/%s' % (bucket_folder,dest_file_name))
您可以使用 put_object
代替 upload_file
:
file = open(r"/tmp/" + filename)
response = s3.meta.client.Bucket('<bucket-name>').put_object(Key='folder/{}'.format(filename), Body=file)
试一试:
s3.meta.client.upload_file(Filename=filename_and_full_path, Bucket=my_bucket, Key=prefix_key_plus_filename_only)