当前位置: 首页 > 知识库问答 >
问题:

如何使用StringIO将url上传到s3 bucket,并使用boto3的put_对象方法

秦承允
2023-03-14

我需要上传网址到一个s3桶,我正在使用boto3。我想我有一个解决方案,这个问题:如何保存S3对象到一个文件使用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())

我的问题是,我需要更改什么,以便将文件作为音频文件而不是URL保存在s3中?

共有1个答案

公孙驰
2023-03-14

我通过使用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'参数,它将无法工作。

 类似资料:
  • 问题内容: 我可以将StringIO对象传递给pd.to_csv()很好: 但是当使用excel编写器时,我遇到了很多麻烦。 返回一个 我正在尝试创建一个不调用的对象,但是遇到了一些麻烦。到目前为止,这是我尝试过的: 但是现在我得到了 如何将Excel格式的熊猫数据框保存到对象? 问题答案: 尽管每个编写器引擎都支持,但Pandas期望ExcelWriter构造函数的文件名路径。也许应该将其作为熊

  • 问题内容: 我正在尝试使用适用于AWS的新boto3客户端做一个“ hello world” 。 我的用例非常简单:从S3获取对象并将其保存到文件中。 在boto 2.XI中,它应该是这样的: 在boto 3中。我找不到一种干净的方法来做同样的事情,所以我手动遍历了“ Streaming”对象: 要么 而且效果很好。我想知道是否有任何“本机” boto3函数可以完成相同的任务? 问题答案: Bot

  • 我正在尝试为AWS的新boto3客户端做一个“hello world”。 我的用例相当简单:从S3获取对象并将其保存到文件中。 在boto 2.X中,我会这样做: 在博托3。我找不到一种干净的方法来做同样的事情,所以我手动迭代“流”对象: 或 而且效果很好。我想知道是否有任何“本机”boto3函数可以完成相同的任务?

  • 为什么bundle有、方法;但是只有方法?我是否只能传输一个元素的,而不是?那么,是用来干什么的?

  • python AWS boto3 s3 put_对象应该如何处理/测试错误?例如: 可能出现的错误是否记录在某个地方?下面的页面是否是正确的留档页面(似乎是为客户端,而不是),如果是,错误记录在哪里? http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_object 像不存在的bucket这样