小编Dus*_*vic的帖子

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

我在 S3 上有一个 .zip 文件列表,它是动态创建的并传递到 Flask view /download。我的问题似乎不在于循环访问此列表,而在于返回响应,以便将列表中的所有文件下载到用户计算机。如果我有一个视图返回响应,它只会下载第一个文件,因为返回会关闭连接。我尝试了很多方法并研究了类似的问题(例如: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})
Run Code Online (Sandbox Code Playgroud)

为了下载所有文件,最好的方法是什么?有没有更简单的方法将列表传递给 boto3 或任何其他 Flask 模块来下载这些文件?

response amazon-s3 flask boto3

5
推荐指数
0
解决办法
798
查看次数

标签 统计

amazon-s3 ×1

boto3 ×1

flask ×1

response ×1