如何使用Flask WTF FileField实际上传文件

Sie*_*cje 11 python flask python-2.7 flask-wtforms

在我的forms.py文件中,我有

    class myForm(Form):
       fileName = FileField()
Run Code Online (Sandbox Code Playgroud)

在我的views.py文件中

    form = myForm()
    if form.validate_on_submit():
        fileName = secure_filename(form.fileName.file.filename)
Run Code Online (Sandbox Code Playgroud)

在我的.html文件中

     {% block content %}
     <form action="" method="post" name="simple" enctype="multipart/form-data">
        <p>
           Upload a file
             {{form.fileName()}}
         </p>
        <p><input type="submit" value="Submit"></p>
     </form>
     {% endblock %}
Run Code Online (Sandbox Code Playgroud)

当我点击提交时它似乎工作但文件不在任何项目目录中.

cod*_*eek 23

你看过这个:

http://flask.pocoo.org/docs/patterns/fileuploads/#uploading-files

您必须设置一些配置,例如UPLOAD_FOLDER等.您还必须调用我在发布的views.py代码中看不到的save()函数.

file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
Run Code Online (Sandbox Code Playgroud)

  • 为你修好了 (5认同)
  • 对不起,我不是故意要投票,一定是不小心点击了,现在我再也不能投票了! (4认同)

Tra*_*ham 9

在form.fileName.file上,调用'.save'.

filename = secure_filename(form.fileName.file.filename)
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
form.fileName.file.save(file_path)
Run Code Online (Sandbox Code Playgroud)

确保使用secure_filename()来防止用户输入错误的文件名,例如"../../../../home/username/.bashrc".

无论您使用什么操作系统,使用os.path.join都会生成正确的绝对路径.


Sie*_*cje 8

我只需要在form.fileName.file.save上调用.save

    myFile = secure_filename(form.fileName.file.filename)
    form.fileName.file.save(PATH+myFile)
Run Code Online (Sandbox Code Playgroud)