Flask笔记:文件上传
发布时间:2020-12-15 00:32:19 所属栏目:大数据 来源:网络整理
导读:文件上传 enctype: 在HTML中的form表单中form标签默认是`enctype="application/x-www-form-urlencoded"`,在文件上传时需要设置为`enctype="multipart/form-data"`,不然文件上传不会成功。 后台获取上传的文件: fileobj = request.files.get('input_file_
文件上传
? 文件验证
? 简单示例: HTML文件upload.html主要代码 <form action="" method="post" enctype="multipart/form-data"> table> tbody> tr> td>头像:</><input type="file" name="avatar"></>描述:="text"="desc"="submit" value="提交"> form> 浏览器效果 表单对象文件forms.py from wtforms import Form,FileField,StringField from wtforms.validators InputRequired from flask_wtf.file FileRequired,FileAllowed class UploadFileForm(Form): # FileField表示字段为文件类型 avatar = FileField(validators=[FileRequired(),FileAllowed(['jpg',pnggif'])]) StringField表示字段为字符串类型 desc = StringField(validators=[InputRequired()]) ? ?主py文件 os from werkzeug.utils secure_filename from werkzeug.datastructures CombinedMultiDict from flask Flask,request,render_template,send_from_directory from forms UploadFileForm app = Flask(__name__) 所有图片文件放在根目录的images文件夹下 UPLOAD_PATH = os.path.join(os.path.dirname(__file__),1)">images) @app.route(/upload/GETPOST]) def upload(): if request.method == : return render_template(upload.html) else 结合表单request中的多种表单元素 form = UploadFileForm(CombinedMultiDict([request.form,request.files])) if form.validate(): 根据html中对应标签的name属性获取对应上传的数据 request.form相当于一个字典 desc = request.form.get('desc') desc = form.desc.data print(desc) 获取文件需要从request.files中获取 avatar = request.files.get('avatar') avatar = form.avatar.data 为了安全起见,需要将文件名使用特殊方式(secure_filename函数)过滤处理一下 secure_filename对中文支持不是很好,可以对文件名进行转换,但是仍然推荐使用这个函数来进行处理一下 filename = secure_filename(avatar.filename) 返回的文件对象可以直接通过它的save方法传入路径保存,路径不能是相对路径,需要是绝对路径 avatar.save(os.path.join(UPLOAD_PATH,filename)) return 文件上传成功!' : (form.errors) 文件上传失败! @app.route(/images/<filename>/) get_image(filename): 获取文件返回到浏览器中,使用send_from_directory,第一个参数是文件目录,第二个参数是文件名 return send_from_directory(UPLOAD_PATH,filename) if __name__ == __main__: app.run(debug=True) ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |