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)

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

  7. 定义表单的时候,对文件的字段,需要采用FileField这个类型。
  8. 验证器应该从flask_wtf.file中导入。flask_wtf.file.FileRequired是用来验证文件上传是否为空。flask_wtf.file.FileAllowed用来验证上传的文件的后缀名。
  9. 在视图文件中,使用from werkzeug.datastructures import CombinedMultiDict来把request.formrequest.files来进行合并。再传给表单来验证。
    示例代码如下:

    from werkzeug.datastructures import CombinedMultiDict
    form = UploadForm(CombinedMultiDict([request.form,request.files]))
Last modification:May 17, 2020
If you think my article is useful to you, please feel free to appreciate