如何从S3通过Flask和boto3下载多个文件

时间:2018-10-08 22:16:02

标签: amazon-s3 flask response boto3

我在S3上有一个.zip文件的列表,该列表是动态创建并传递到flask视图/下载的。我的问题似乎不是遍历此列表,而是返回响应,以便将列表中的所有文件下载到用户计算机。如果我有视图return响应,则它仅下载第一个文件,因为return关闭连接。 我尝试了很多事情,并研究了类似的问题(例如Boto3 to download all files from a S3 Bucket),但是到目前为止,解决这个问题没有运气。我还研究了流式传输(如此处:http://flask.pocoo.org/docs/1.0/patterns/streaming/),并尝试创建一个子函数(即生成器),但是仍然存在相同的问题,因为我仍然必须将返回值传递给View函数-这是最后的代码例如:

@app.route('/download', methods=['POST'])
def download():
  download=[]
  download = request.form.getlist('checked')
  def generate(result):
    s3_resource = boto3.resource('s3')
    my_bucket = s3_resource.Bucket(S3_BUCKET)
    d_object = my_bucket.Object(result).get()
    yield d_object['Body'].read()
  for filename in download:
    return Response (generate(filename), mimetype='application/zip', headers={'Content-Disposition': 'attachment;filename=' + filename})

执行此操作以下载所有文件的最佳方法是什么? 有没有更简单的方法将列表传递给boto3或任何其他flask模块下载这些文件?

0 个答案:

没有答案