flask实现文件的上传与访问

  1. 在前台的模版中,form表单里面需要指定encotype='multipart/form-data'。然后通过<input type="file" name="photo" />来选择文件。
  2. 后台获取上传的文件,可以使用request.files.get('photo')来获取。
  3. 保存文件之前,先要使用werkzeug.utils.secure_filename来对上传上来的文件名进行一个过滤。这样才能保证不会有安全问题。
  4. 获取到上传上来的文件后,使用photo.save(路径)方法来保存文件。、
  5. 从服务器上读取文件,应该定义一个url与视图函数,来获取指定的文件。在这个视图函数中,使用send_from_directory(文件的目录,文件名)来获取。
  6. 可以通过send_from_directory(UPLOAD_PATH,filename),来访问上穿的文件,第一个参数为路径,第二个参数为文件名。
    示例代码如下:
UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'images')


@app.route('/upload/',methods=['GET','POST'])
def upload():
    # 获取描述信息
    photo = request.files.get("photo")
    filename = secure_filename(photo.filename)
    photo.save(os.path.join(UPLOAD_PATH,filename))
    print(desc)
    return '文件上传成功'

@app.route('/images/<filename>/')
def get_image(filename):
    return send_from_directory(UPLOAD_PATH,filename)

注意:对上传文件使用表单验证:

  1. 定义表单的时候,对文件的字段,需要采用FileField这个类型。
  2. 验证器应该从flask_wtf.file中导入。flask_wtf.file.FileRequired是用来验证文件上传是否为空。flask_wtf.file.FileAllowed用来验证上传的文件的后缀名。
  3. 在视图文件中,使用from werkzeug.datastructures import CombinedMultiDict来把request.formrequest.files来进行合并。再传给表单来验证。
    示例代码如下:
from werkzeug.datastructures import CombinedMultiDict
form = UploadForm(CombinedMultiDict([request.form,request.files]))
Last modification:May 17th, 2020 at 07:41 am
If you think my article is useful to you, please feel free to appreciate