Python Flask send_文件生成重复文件
我使用FlaskPython Flask send_文件生成重复文件,python,flask,Python,Flask,我使用Flasksend_file让用户下载zip文件。下载功能可以工作,但每次用户下载文件时,都会在mymy_project/app/中创建一个重复的zip文件。我似乎不知道重复文件是如何生成的 @post_user_blueprint.route('/download_note/<string:ind_id>/', methods=['GET', 'POST']) def download_note(ind_id): zip_name = "{0}_notes.zip".
send_file
让用户下载zip文件。下载功能可以工作,但每次用户下载文件时,都会在mymy_project/app/
中创建一个重复的zip文件。我似乎不知道重复文件是如何生成的
@post_user_blueprint.route('/download_note/<string:ind_id>/', methods=['GET', 'POST'])
def download_note(ind_id):
zip_name = "{0}_notes.zip".format(ind_id)
upload_path = current_app.config['UPLOAD_PATH']
path = os.path.dirname(upload_path + "/documents/" + "/{0}/".format(ind_id))
zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(path):
for file in files:
zipf.write(path + '/' + file, basename(path + '/' + file))
zipf.close()
return send_file(zip_name, as_attachment=True)
@post\u user\u blueprint.route('/download\u note/',methods=['GET','post'])
def下载说明(索引id):
zip_name=“{0}_notes.zip”。格式(ind_id)
上传路径=当前的应用程序配置['upload\u path']
path=os.path.dirname(上传路径+“/documents/“+”/{0}/”。格式(ind\u id))
zipf=zipfile.zipfile(zip_名称'w',zipfile.zip_缩小)
对于os.walk(路径)中的根、目录和文件:
对于文件中的文件:
write(路径+'/'+文件,基名称(路径+'/'+文件))
zipf.close()
返回send_文件(zip_名称,as_attachment=True)
代码将字符串传递给ZipFile构造函数:
zip_name = "{0}_notes.zip".format(ind_id)
zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
ZipFile将字符串解释为要在其中创建ZipFile的文件系统位置,例如当前目录中的foo_notes.zip
但是,您不想在磁盘上创建文件,您只想在内存中创建它
要执行此操作,请将BytesIO
实例传递给ZipFile
的构造函数,而不是字符串:
from io import BytesIO
@post_user_blueprint.route('/download_note/<string:ind_id>/', methods=['GET', 'POST'])
def download_note(ind_id):
zip_buffer = BytesIO()
upload_path = current_app.config['UPLOAD_PATH']
path = os.path.dirname(upload_path + "/documents/" + "/{0}/".format(ind_id))
zipf = zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(path):
for file in files:
zipf.write(path + '/' + file, basename(path + '/' + file))
zipf.close()
return send_file(zip_name, as_attachment=True)
从io导入字节io
@post_user_blueprint.route('/download_note/',methods=['GET','post'])
def下载说明(索引id):
zip_buffer=BytesIO()
上传路径=当前的应用程序配置['upload\u path']
path=os.path.dirname(上传路径+“/documents/“+”/{0}/”。格式(ind\u id))
zipf=zipfile.zipfile(压缩缓冲区'w',压缩文件.zipfile已压缩)
对于os.walk(路径)中的根、目录和文件:
对于文件中的文件:
write(路径+'/'+文件,基名称(路径+'/'+文件))
zipf.close()
返回send_文件(zip_名称,as_attachment=True)
现在,zipfile的数据将写入内存中的
BytesIO
实例,而不是磁盘。代码将字符串传递给zipfile构造函数:
zip_name = "{0}_notes.zip".format(ind_id)
zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
ZipFile将字符串解释为要在其中创建ZipFile的文件系统位置,例如当前目录中的foo_notes.zip
但是,您不想在磁盘上创建文件,您只想在内存中创建它
要执行此操作,请将BytesIO
实例传递给ZipFile
的构造函数,而不是字符串:
from io import BytesIO
@post_user_blueprint.route('/download_note/<string:ind_id>/', methods=['GET', 'POST'])
def download_note(ind_id):
zip_buffer = BytesIO()
upload_path = current_app.config['UPLOAD_PATH']
path = os.path.dirname(upload_path + "/documents/" + "/{0}/".format(ind_id))
zipf = zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk(path):
for file in files:
zipf.write(path + '/' + file, basename(path + '/' + file))
zipf.close()
return send_file(zip_name, as_attachment=True)
从io导入字节io
@post_user_blueprint.route('/download_note/',methods=['GET','post'])
def下载说明(索引id):
zip_buffer=BytesIO()
上传路径=当前的应用程序配置['upload\u path']
path=os.path.dirname(上传路径+“/documents/“+”/{0}/”。格式(ind\u id))
zipf=zipfile.zipfile(压缩缓冲区'w',压缩文件.zipfile已压缩)
对于os.walk(路径)中的根、目录和文件:
对于文件中的文件:
write(路径+'/'+文件,基名称(路径+'/'+文件))
zipf.close()
返回send_文件(zip_名称,as_attachment=True)
现在,zipfile的数据将写入内存中的BytesIO
实例,而不是磁盘