[英]Zip a Folder But Store In a Variable to Flask?
我有一段代码在临时目录的 for 循环中创建文件。
但是,我的目标是将它们 zip 起来,但不是将压缩文件存储在磁盘上,而是将其存储在变量中。 这是我的代码: https://pastebin.com/ZTbghf8S
此代码将位于 class 中,我会将其从 Flask web 服务器提供给用户,如下所示:
@app.route("/download_file")
def downloadfile():
Object = MyClass(variable='random_variable')
return Response(Object.getFile()['object'])
我该怎么做?
我之前回答过一个问题来做类似的事情,尽管它似乎已被删除。 我想出了这个以压缩 PIL 图像为主题的要点,但概念是相似的。
目标是在 memory 中构建一个 Z4348F938BDDDD8475E967CCB47ECB234Z 文件,并与 Flask 一起服务,而无需将其写入服务器上的磁盘。
要使其适应您的代码,您可以创建一个 function 来处理ans
并返回一个元组,其中第一项是 output 路径,第二项是 BytesIO ZA8CFDE6331BD4B66AC96F8911C。
import io, os
def process_individual(ans):
codepath = ans.find("a", {"class": "panel-group-toggle"}).text.strip().split("/") #File path and name
codeans = ans.find("code", {"class": "brush"}).text #The answer
# return a compatible tuple
return ( os.path.join(q, f'{exer_id}_template', *codepath),
io.BytesIO(codeans.encode(encoding='UTF-8') )
并根据元组列表定义在 memory zip 中创建的业务 function。 这应该从第一项获取文件路径,并相应地在 zip 文件中创建该文件夹结构。
import zipfile
def get_zip_buffer(list_of_tuples):
zip_buffer = io.BytesIO()
# https://stackoverflow.com/a/44946732 <3
with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, False) as zip_file:
for file_name, data in list_of_tuples:
zip_file.writestr(file_name, data.read())
zip_buffer.seek(0)
return zip_buffer
要将其放在 Flask 中,您可能有如下下载路径:
@app.route('/downloader')
def download():
list_of_tuples = [process_individual(a) for a in individual_ans]
buff = get_zip_buffer(list_of_tuples)
return send_file(buff,
mimetype='application/zip',
as_attachment=True,
attachment_filename='memoryzip.zip')
我尚未使用您的输入数据对此进行测试,因此可能需要稍作调整。 希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.