Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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 如何从BytesIO-Flask数组创建zipFile_Python_Flask_Zip_Bytesio - Fatal编程技术网

Python 如何从BytesIO-Flask数组创建zipFile

Python 如何从BytesIO-Flask数组创建zipFile,python,flask,zip,bytesio,Python,Flask,Zip,Bytesio,我创建了一个字节数组——每个对象都是保存在内存中的文件(文本)。 我试着把它们压缩成zip文件并下载。 我得到一个错误“\u io.BytesIO”对象不可下标”。 代码如下: @app.route('/home', methods =['GET','POST']) def home(): form = Form() if form.validate_on_submit(): new_file = create_file(form, index) re

我创建了一个字节数组——每个对象都是保存在内存中的文件(文本)。 我试着把它们压缩成zip文件并下载。 我得到一个错误“\u io.BytesIO”对象不可下标”。 代码如下:

@app.route('/home', methods =['GET','POST'])
def home():
    form = Form()
    if form.validate_on_submit():
       new_file = create_file(form, index)
       return send_file(new_file, attachment_filename=name, as_attachment=True) 
    return render_template('ot.html', title='new', form=form)

def create_file(form, index):
    pick_up_file = create_file_base(form, index, 'start.text')
    drop_tip_file = create_file_base(form, index, 'end.text')
    working_file = create_file_base(form, index, 'workFile.text')
    files = [working_file]
    memory_file = BytesIO()
    with zipfile.ZipFile(memory_file, 'w') as fileobj:
        for curFile in files:
            data = zipfile.ZipInfo(curFile['fileName'])
            data.date_time = time.localtime(time.time())[:6]
            data.compress_type = zipfile.ZIP_DEFLATED
            fileobj.writestr(data, curFile['fileData'])
    memory_file.seek(0)
    return memory_file

def create_file_base(form, index, name):
    myData = 'abc'
    new_file = BytesIO()
    new_file.write(myData.encode('utf-8'))
    src_file = open('otFile/static/'+name, 'r')
    src_text = src_file.read()
    src_file.close()
    new_file.write(src_text.encode('utf-8'))
    new_file.seek(0)
    return new_file
错误的完整回溯:

File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2464, in __call__
Open an interactive python shell in this framereturn self.wsgi_app(environ, start_response)
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\lirons\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\lirons\Documents\ot2\otFile\routes.py", line 35, in home
new_file = create_file(form, index)
File "C:\Users\lirons\Documents\ot2\otFile\routes.py", line 54, in create_file
data = zipfile.ZipInfo(curFile['fileName'])
我找到了解决办法。 更改为:

files = [working_file]
memory_file = BytesIO()
with zipfile.ZipFile(memory_file, 'w') as fileobj:
    for curFile in files:
        data = zipfile.ZipInfo(curFile['fileName'])
        data.date_time = time.localtime(time.time())[:6]
        data.compress_type = zipfile.ZIP_DEFLATED
        fileobj.writestr(data, curFile['fileData'])
致:


完整的回溯会有帮助哪些数据丢失?这些文件是位于项目静态文件夹中的文本文件。“缺少哪些数据”-“完全回溯”将是打印时出现错误“io.BytesIO对象不可订阅”的文本。这就是你问题中缺少的。
with zipfile.ZipFile(memory_file, 'w', compression=zipfile.ZIP_DEFLATED) as zipObject:
    zipObject.writestr("pick_up_file " , pick_up_file.read())
    zipObject.writestr("drop_tip_file" , drop_tip_file.read())
    zipObject.writestr("working_file" , working_file.read())