我试过这个:
import boto3
from boto3.s3.transfer import TransferConfig, S3Transfer
path = "/temp/"
fileName = "bigFile.gz" # this happens to be a 5.9 Gig file
client = boto3.client('s3', region)
config = TransferConfig(
multipart_threshold=4*1024, # number of bytes
max_concurrency=10,
num_download_attempts=10,
)
transfer = S3Transfer(client, config)
transfer.upload_file(path+fileName, 'bucket', 'key')
结果:s3上的5.9 gig文件。似乎不包含多个部分。
我找到了这个示例,但是没有定义部分。
import boto3
bucket = 'bucket'
path = "/temp/"
fileName = "bigFile.gz"
key = 'key'
s3 = boto3.client('s3')
# Initiate the multipart upload and send the part(s)
mpu = s3.create_multipart_upload(Bucket=bucket, Key=key)
with open(path+fileName,'rb') as data:
part1 = s3.upload_part(Bucket=bucket
, Key=key
, PartNumber=1
, UploadId=mpu['UploadId']
, Body=data)
# Next, we need to gather information about each part to complete
# the upload. Needed are the part number and ETag.
part_info = {
'Parts': [
{
'PartNumber': 1,
'ETag': part['ETag']
}
]
}
# Now the upload works!
s3.complete_multipart_upload(Bucket=bucket
, Key=key
, UploadId=mpu['UploadId']
, MultipartUpload=part_info)
问题:有人知道如何使用boto3的多部分上传吗?
如官方boto3文件所述:
AWS SDK for Python自动管理重试以及多部分和非多部分传输。
管理操作通过使用合理的默认设置来执行,这些设置非常适合大多数场景。
因此,您所需要做的就是设置所需的多部分阈值,该阈值将指示Python SDK将自动处理多部分上传的最小文件大小:
import boto3
from boto3.s3.transfer import TransferConfig
# Set the desired multipart threshold value (5GB)
GB = 1024 ** 3
config = TransferConfig(multipart_threshold=5*GB)
# Perform the transfer
s3 = boto3.client('s3')
s3.upload_file('FILE_NAME', 'BUCKET_NAME', 'OBJECT_NAME', Config=config)
此外,您还可以通过设置max_concurrency
来使用多线程机制进行多部分上传:
# To consume less downstream bandwidth, decrease the maximum concurrency
config = TransferConfig(max_concurrency=5)
# Download an S3 object
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)
最后,如果你想在单线程中执行多部分上传,只需设置use_threads=False
:
# Disable thread use/transfer concurrency
config = TransferConfig(use_threads=False)
s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME', Config=config)
完整的源代码和解释:Python S3多部分文件上载,带有元数据和进度指示器
你的代码已经正确了。实际上,一个多部分上传的最小示例如下所示:
import boto3
s3 = boto3.client('s3')
s3.upload_file('my_big_local_file.txt', 'some_bucket', 'some_key')
您不需要显式地请求多部分上传,也不需要使用boto3中与多部分上传相关的任何低级函数。只需调用upload_file
,如果您的文件大小超过某个阈值(默认值为8MB),boto3将自动使用多部分上传。
S3的最终结果显然不是由多个部分组成,这一事实似乎让您感到困惑:
结果:s3上的5.9 gig文件。似乎不包含多个部分。
... 但这是预期的结果。MultipartUpload API的全部要点是允许您通过多个HTTP请求上载单个文件,并最终在S3中使用单个对象。
我建议您为此使用bot3.s3.transfer。以下是一个例子:
import boto3
def upload_file(filename):
session = boto3.Session()
s3_client = session.client("s3")
try:
print("Uploading file: {}".format(filename))
tc = boto3.s3.transfer.TransferConfig()
t = boto3.s3.transfer.S3Transfer(client=s3_client, config=tc)
t.upload_file(filename, "my-bucket-name", "name-in-s3.dat")
except Exception as e:
print("Error uploading: {}".format(e))
我的表大约是220mb,里面有250k记录。我试图将所有这些数据拉入Python。我意识到这需要一个大块的批处理过程,并循环通过,但我不确定如何设置批处理,以开始前一个离开。 有什么方法可以过滤我的扫描吗?据我所知,过滤是在加载后发生的,加载在1mb时停止,因此我实际上无法扫描新对象。 任何协助都将不胜感激。
Boto3 - The AWS SDK for Python Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) forPython, which allows Python developers to write software that makes useof services like Amazon S
本文向大家介绍用Javascript完成图类,包括了用Javascript完成图类的使用技巧和注意事项,需要的朋友参考一下 在此代码中已注释掉的功能。您也可以切换到那些。我们还将Queue,Stack和PriorityQueue类移到了可以使用import语句或require调用导入的不同模块中。这是Graph类的完整实现- 示例
问题内容: 如何快速执行Firebase的完成侦听器?它说文档中有SetValue和UpdateValue的完成列表,但没有示例。 问题答案: setValue的完成在{}块(关闭)中处理。因此,一旦尝试设置setValue,该块中的代码就会执行。如果没有错误,错误将为nil,快照将是已写入的数据。 给出结果 并打印“完成”
问题内容: 我正在尝试实现自动补全功能,但是找不到在Swift中可用的示例。下面,我打算转换Ray Wenderlich的自动完成教程 和2010年的示例代码。最后,代码进行了编译,但是没有显示包含可能完成的表格,而且我没有经验来了解为什么它未被隐藏shouldChangeCharactersInRange。 问题答案: 用下面的内容替换您的函数内容。希望对您有帮助。
我有一个用例,我使用lambda函数生成有符号的网址上传到S3桶,我还在生成有符号的网址时设置了元数据值,我的boto3版本是boto3==1.18.35。以前,当我生成有符号的网址上传到桶时,网址看起来像这样: https://bucket-name.s3.amazonaws.com/scanned-file-list/cf389880-09ff-4301-8fa7-b4054941685b/6