Python:快速上传大文件S3

Pho*_* Vu 8 python upload amazon-s3 boto3

我试图在 S3 上以编程方式上传一个高达 1GB 的非常大的文件。因为我发现 AWS S3 支持大文件的分段上传,所以我找到了一些 Python 代码来做到这一点。(链接

我的观点:上传速度太慢(将近1分钟)。

有什么办法可以提高分段上传的性能。或者任何支持 S3 上传的好的库

Pho*_* Vu 13

将我的答案留在这里供参考,使用此代码性能提高了两倍:

import boto3
from boto3.s3.transfer import TransferConfig


s3_client = boto3.client('s3')

S3_BUCKET = 'mybucket'
FILE_PATH = '/path/to/file/'
KEY_PATH = "/path/to/s3key/" 

def uploadFileS3(filename):
    config = TransferConfig(multipart_threshold=1024*25, max_concurrency=10,
                        multipart_chunksize=1024*25, use_threads=True)
    file = FILE_PATH + filename
    key = KEY_PATH + filename
    s3_client.upload_file(file, S3_BUCKET, key,
    ExtraArgs={ 'ACL': 'public-read', 'ContentType': 'video/mp4'},
    Config = config,
    Callback=ProgressPercentage(file)
    )

uploadFileS3('upload.mp4')
Run Code Online (Sandbox Code Playgroud)

特别感谢@BryceH 的建议。虽然解决方案确实提高了 S3 上传的性能,但我仍然愿意接受任何更好的解决方案。谢谢

  • 仅仅因为它返回 null 并不意味着它不起作用(确实如此)。对于那些寻找 ProgressPercentage() 的人,可以从 https://boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/s3/transfer.html 复制/粘贴 (3认同)