Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask send_文件生成重复文件_Python_Flask - Fatal编程技术网

Python Flask send_文件生成重复文件

Python 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".

我使用Flask
send_file
让用户下载zip文件。下载功能可以工作,但每次用户下载文件时,都会在my
my_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
实例,而不是磁盘