当AWS S3签名URL上传超过一定限制时,会返回403 Forbidden错误代码。要解决此问题,可以在代码中使用Multipart Upload来上传大文件。以下是一个示例代码:
import boto3
# 创建S3客户端
s3 = boto3.client('s3')
# 定义上传的桶和对象键
bucket_name = 'your_bucket_name'
object_key = 'your_object_key'
# 初始化Multipart Upload
response = s3.create_multipart_upload(Bucket=bucket_name, Key=object_key)
upload_id = response['UploadId']
# 分片上传文件
part_number = 1
part_size = 5 * 1024 * 1024 # 每个分片大小,这里设置为5MB
file_path = 'path_to_your_file'
with open(file_path, 'rb') as file:
while True:
data = file.read(part_size)
if not data:
break
response = s3.upload_part(
Bucket=bucket_name,
Key=object_key,
PartNumber=part_number,
UploadId=upload_id,
Body=data
)
part_number += 1
# 完成Multipart Upload
parts = [{'PartNumber': i['PartNumber'], 'ETag': i['ETag']} for i in response['Parts']]
s3.complete_multipart_upload(
Bucket=bucket_name,
Key=object_key,
UploadId=upload_id,
MultipartUpload={'Parts': parts}
)
上述代码使用AWS SDK for Python(Boto3)创建了一个S3客户端,然后初始化了Multipart Upload,并按指定大小将文件分片上传。最后,通过complete_multipart_upload方法完成了Multipart Upload。这种方法可以避免403错误,并允许上传大文件到AWS S3。请替换代码中的your_bucket_name
、your_object_key
和path_to_your_file
为实际的值。