我在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模块下载这些文件?