AWS预签名URL的数据上传进度跟踪器
创始人
2024-09-28 01:00:36
0

以下是一个使用Python语言的示例代码,用于跟踪AWS预签名URL的数据上传进度。

import requests
import os
import boto3
import threading

class ProgressPercentage(object):
    def __init__(self, filename):
        self._filename = filename
        self._size = float(os.path.getsize(filename))
        self._lock = threading.Lock()
        self._uploaded = 0

    def __call__(self, bytes_amount):
        with self._lock:
            self._uploaded += bytes_amount
            percentage = (self._uploaded / self._size) * 100
            print(f"Uploaded {self._uploaded} bytes out of {self._size} ({percentage:.2f}%)")

# 获取预签名URL
def get_presigned_url(bucket, key):
    s3_client = boto3.client('s3')
    response = s3_client.generate_presigned_url(
        'put_object',
        Params={
            'Bucket': bucket,
            'Key': key,
        },
        ExpiresIn=3600 # URL有效期为1小时
    )
    return response

# 使用预签名URL上传文件
def upload_file_with_progress(url, file_path):
    with open(file_path, 'rb') as file:
        total_size = os.path.getsize(file_path)
        headers = {'Content-Length': str(total_size)}
        response = requests.put(url, data=file, headers=headers, stream=True)
        if response.status_code == 200:
            print("File uploaded successfully")
        else:
            print("File upload failed")

# 示例用法
def main():
    bucket = 'your-bucket-name'
    key = 'your-file-key'
    file_path = 'path/to/your/file'

    url = get_presigned_url(bucket, key)
    progress = ProgressPercentage(file_path)

    upload_thread = threading.Thread(
        target=upload_file_with_progress,
        args=(url, file_path),
        kwargs={'progress_callback': progress}
    )
    upload_thread.start()

    # 等待上传完成
    upload_thread.join()

if __name__ == '__main__':
    main()

上述代码中,我们定义了一个ProgressPercentage类,用于跟踪上传进度。在每次上传数据时,会调用该类的__call__方法来更新进度信息。

get_presigned_url函数使用AWS SDK的generate_presigned_url方法来获取预签名URL。upload_file_with_progress函数使用requests库发送PUT请求来上传文件,并将进度信息传递给ProgressPercentage类。

在主函数main中,我们可以设置bucketkeyfile_path来指定要上传的文件。然后,我们获取预签名URL并创建一个ProgressPercentage对象。接下来,我们创建一个线程来执行文件上传操作,并在最后等待上传完成。

请确保已安装所需的Python库(boto3requests),并将示例代码中的your-bucket-nameyour-file-keypath/to/your/file替换为实际的值。

相关内容

热门资讯

推荐透视"wpk破解... 无需打开直接搜索;操作使用教程:推荐透视"wpk破解器"开挂(透视)辅助下载(推荐一款解说技巧)1、...
盘点透视"wepok... 无需打开直接搜索;操作使用教程:盘点透视"wepoker透视挂使用教程"开挂(透视)辅助器(玩家攻略...
了解透视"微乐扑克记... 您好:微乐扑克记牌器怎么用这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
原来有透视"wepo... 原来有透视"wepoker透视辅助挂有游戏亮点"开挂(透视)辅助工具(一分钟揭秘解说技巧)是一款可以...
发现透视"wepok... 发现透视"wepoker能不能透视"开挂(透视)辅助下载(重大科普分享教程)是一款可以让一直输的玩家...
盘点透视"WePOK... 盘点透视"WePOKer辅助软件挂"开挂(透视)辅助挂(科技揭秘详细教程)是一款可以让一直输的玩家,...
了解透视"wepok... 了解透视"wepoker能开挂吗"开挂(透视)辅助工具(分享一款AA德州教程)是一款可以让一直输的玩...
通报透视"wepok... wepoker如何拿到好牌是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户...
教会透视"wepok... >>您好:wepoker辅助器怎么用软件加扣扣群确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用...
教会透视"wpk开挂... 您好,wpk开挂挂官方多久能发现这款游戏可以开挂的,确实是有挂的,需要了解加微【136704302】...