Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法用python将块写入AWSS3_Python_Python 3.x_Amazon Web Services_Amazon S3 - Fatal编程技术网

有没有办法用python将块写入AWSS3

有没有办法用python将块写入AWSS3,python,python-3.x,amazon-web-services,amazon-s3,Python,Python 3.x,Amazon Web Services,Amazon S3,我正在构建的API当前将文件从端点保存到我的EC2实例。我想将文件直接保存到S3,但无法将数据块流式传输到S3。这是原始代码: def_get_文件(self、id、value、current、count): msg='Downloading ID:{}de{}'。格式(ID,current,count) log.info(msg) 对于范围内的i(尝试计数): 尝试: r=self.\u session.get(值['url'],stream=True,timeout=timeout) 如果r

我正在构建的API当前将文件从端点保存到我的EC2实例。我想将文件直接保存到S3,但无法将数据块流式传输到S3。这是原始代码:

def_get_文件(self、id、value、current、count):
msg='Downloading ID:{}de{}'。格式(ID,current,count)
log.info(msg)
对于范围内的i(尝试计数):
尝试:
r=self.\u session.get(值['url'],stream=True,timeout=timeout)
如果r.status_code==200:
打开(值['path_file'],'wb')作为f:
对于r.iter_内容中的块(1024):
f、 写入(块)
如果值['acuse']:
self.\u save\u acuse(id,值['acuse']))
返回
例外情况除外。超时:
log.debug('超时')
持续
例外情况除外,如e:
日志错误(str(e))
返回
msg='超时:{}'。格式(id)
日志错误(msg)
返回
修改后的程序正在S3 bucket中创建目录和文件,但实际的txt文件有0个字节,因此它没有正确地将块写入S3

甚至可以将数据块流式传输到S3吗?
或者我必须将文件存储在EC2中,然后将其上载到S3存储桶中吗?

我假设您使用Boto3与S3交互

在这种情况下,请使用S3客户端的
上传\u fileobj
方法。该方法接受任何类似文件的对象,并将其流式传输到S3中,例如:

import boto3
s3 = boto3.client('s3')

with open('filename', 'rb') as data:
    s3.upload_fileobj(data, 'mybucket', 'mykey')
您可以在本地下载文件并在上载到S3之前将其存储,或者如果用于下载文件的库提供类似文件的响应对象,则可以


本例提供了一个类似于文件的包装器,用于
请求
,您可以使用它直接上传到S3。

在您共享的代码片段中,没有任何地方显示向S3写入任何内容。这是我使用的原始代码,S3代码实际上不起作用。如果您不共享S3代码,我们应该如何帮助您?这是下载文件并通过流本地写入文件的python代码。如果你想看的话,我马上上传S3代码。我只是不认为我的方法是正确的,我想看到另一种方法。