python - 如何使用 StringIO 和 put_object 方法将 url 上传到 s3 存储桶和 boto3
问题描述
我需要将 URL 上传到 s3 存储桶并且正在使用 boto3。我以为我有一个解决这个问题的方法:How to save S3 object to a file using boto3但是当我去下载文件时,我仍然遇到错误。目标是让他们下载为音频文件,而不是 URL。我的代码:
for row in list_reader:
media_id = row['mediaId']
external_id = row['externalId']
with open('10-17_res1.csv', 'a') as results_file:
file_is_empty = os.stat('10-17_res1.csv').st_size == 0
results_writer = csv.writer(
results_file, delimiter = ',', quotechar = '"'
)
if file_is_empty:
results_writer.writerow(['fileURL','key', 'mediaId','externalId'])
key = 'corpora/' + external_id + '/' + external_id + '.flac'
bucketname = 'my_bucket'
media_stream = media.get_item(media_id)
stream_url = media_stream['streams'][0]['streamLocation']
fake_handle = StringIO(stream_url)
s3c.put_object(Bucket=bucketname, Key=key, Body=fake_handle.read())
我的问题是,我需要更改什么才能将文件保存在 s3 中作为音频文件,而不是 URL?
解决方案
我通过使用 smart_open 模块解决了这个问题:
with smart_open.open(stream_url, 'rb',buffering=0) as f:
s3.put_object(Bucket=bucketname, Key=key, Body=f.read())
请注意,如果没有 'buffering=0' 参数,它将无法工作。
推荐阅读
- c++ - 如何解决快速排序功能中的问题?
- c# - 在生产中正常重新启动 Service Fabric 应用程序以反映对数据包的更新
- c# - 如何将模型列表转换为从它继承的另一个模型列表?
- spring-boot - Quarkus 封装行为
- c++ - 如何优化此主要测试以减少时间?
- java - 使用 Spring Boot 运行 Vue
- javascript - 异步函数中的多个等待不返回
- python - Groupby 具有产品聚合的多列
- presto - 在 AWS Athena 上使用 Presto 的 Coalesce 函数和一行
- apache - 仅允许通过 .htaccess 的 cloudflare ip 范围给出 403 错误