💡 学习flask是因为大创,需求是接收微信小程序发送来的音频,而后由学长的算法对该音频进行分析。
后端接收文件上传 原生flask使用的是request包
1 2 3 4 5 6 7 8 from werkzeug.utils import secure_filenamefrom flask import request@app.route('/upload' , methods=['GET' , 'POST' ] ) def upload_file (): if request.method == 'POST' : file = request.files['the_file' ] file.save(f"/var/www/uploads/{secure_filename(file.filename)} " )
但尝试这样接收小程序上传的文件时,报错
'Request' object has no attribute 'File'
经过搜索得知,微信小程序的文件被包裹在FileField中,无法靠Request.file检索
要处理FileField式的文件上传,需要使用另外两个包
教程见 How to Handle File Uploads with Flask
我最终的代码如下, flask确实轻量,只用了30行不到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from flask import Flaskfrom flask_wtf import FlaskFormfrom flask_wtf.file import FileFieldfrom flask_uploads import configure_uploads,UploadSet,AUDIOapp = Flask(__name__) app.debug = True app.config['UPLOADED_SOUNDS_DEST' ] = './uploads' app.config['SECRET_KEY' ] = 'heyheyhey' sounds = UploadSet('sounds' ,AUDIO) configure_uploads(app,sounds) class MyForm (FlaskForm ): sound = FileField('sound' ) @app.route("/upload2" ,methods=['POST' ] ) def upload (): form = MyForm() filename = sounds.save(form.sound.data) return filename if __name__ == '__main__' : app.run(debug=True )