文件上传过程中,一定要进行文件大小的校验,如果用户上传文件过大,比如: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()
文件的压缩和解压
需要借助python标准库中的shutil模块的两个方法
压缩:shutil.make_archive("文件压缩后存放的路径","压缩的格式","要压缩的文件路径")
解压:解压tar包 shutil._unpack_tarfile("要解压的文件路径或者一个bytes类型的文件对象","解压后文件的存放路径")
解压zip包 shutil._unpack_zipfile()
备注:压缩文件中还有中文文件名会报错