flask实现文件的上传

  文件上传过程中,一定要进行文件大小的校验,如果用户上传文件过大,比如:100GB,所以一直在处理这个请求,别的请求进来就无法处理了,所以要限制上传文件的大小。

flask中文件上传大小的校验

  flask中,提供了校验文件大小的机制,所以在配置文件中进行配置,并重写异常返回信息即可。

设置配置文件:app.config['MAX_CONTENT_LENGTH']=1024 * 1024 * 5 

自定制错误返回信息

在flask内部,会帮我们校验,如果上传文件大于设置,会返回一个 413 的异常

所以自定义这个413的异常信息

@app.errorhandler(413)
def error(arg):
    ret = make_response('上传文件最大支持:5M')
    ret.status_code = 413
    return ret
自定制异常信息

这个在mac和linux上不报错,但是在Windows下会报错,解决方式

from gevent.pywsgi import WSGIServer
from flask import Flask,request,render_template,make_response

app = Flask(__name__)
app.debug = True
app.config['MAX_CONTENT_LENGTH'] = 1024 *1024 * 7

@app.route('/')
def hello():
    return 'Hello World'

@app.route('/upload',methods=['GET','POST'])
def upload():
    if request.method == 'POST':
        file = request.files.get('file')
        print(file.stream)
    return render_template('upload.html')

@app.errorhandler(413)
def error(arg):
    ret = make_response('上传文件最大支持:5M')
    ret.status_code = 413
    return ret

if __name__ == '__main__':
    # app.run(host='127.0.0.1',port=5000)
    http_server = WSGIServer(('127.0.0.1', 5000), app)
    http_server.serve_forever()
解决Windows下的报错

文件的压缩和解压

   需要借助python标准库中的shutil模块的两个方法

压缩:shutil.make_archive("文件压缩后存放的路径","压缩的格式","要压缩的文件路径")      

解压:解压tar包   shutil._unpack_tarfile("要解压的文件路径或者一个bytes类型的文件对象","解压后文件的存放路径")     

     解压zip包    shutil._unpack_zipfile()   

备注:压缩文件中还有中文文件名会报错      

 

posted @ 2018-07-29 21:43  一抹浅笑  阅读(1083)  评论(0编辑  收藏  举报