如果需要上传超过 1 分钟的视频,可以考虑使用 AWS 的 MultipartUpload API 来实现。
以下是使用 Python SDK 示例代码:
import boto3
from botocore.exceptions import NoCredentialsError
BUCKET_NAME = 'your-bucket-name'
FILE_NAME = 'your-video-file.mp4'
s3 = boto3.client('s3')
# 生成的 URL 链接有效期是 5 分钟,可以根据需要调整
url = s3.generate_presigned_url(
ClientMethod='create_multipart_upload',
Params={
'Bucket': BUCKET_NAME,
'Key': FILE_NAME,
# 视频存储的权限设置,默认是 private
'ACL': 'private',
# 视频存储的媒体类型设置
'ContentType': 'video/mp4'
},
ExpiresIn=300
)
# 上传视频分块(Part)
def upload_part(file, part_number, upload_id, s3_client):
try:
response = s3_client.upload_part(
Body=file,
Bucket=BUCKET_NAME,
Key=FILE_NAME,
PartNumber=part_number,
UploadId=upload_id
)
return response
except NoCredentialsError as e:
print(e)
return None
# 开始上传,可以根据需要调整各个参数
with open(FILE_NAME, 'rb') as file:
upload_id = s3.create_multipart_upload(
Bucket=BUCKET_NAME,
Key=FILE_NAME,
ContentType='video/mp4'
)['UploadId']
part_size = 1024 * 1024 * 5 # 每个 Part 的大小
part_number = 1
parts = []
while True:
buf = file.read(part_size)
if not buf:
break
response = upload_part(buf, part_number, upload_id, s3)
parts.append({'PartNumber': part_number, 'ETag': response['ETag']})
part_number += 1
# 完成上传
s3.complete_multipart_upload(
Bucket=BUCKET