【问题标题】:flask check if user selected a file to upload烧瓶检查用户是否选择了要上传的文件
【发布时间】:2021-11-02 19:48:10
【问题描述】:

我已经检查了 stackoverflow 和其他地方以及他们使用 files.filename 来检查文件是否可用的任何地方。如果我这样做,我会收到消息

AttributeError: 'list' 对象没有属性 'filename'

我错过了什么吗?还是有其他方法可以检查用户是否选择了要上传的文件?

我的 HTML:

  <form method="POST" enctype="multipart/form-data" action="/upload">
    <label>Choose a problem report file (*.zip).
      <input type="file" name="file[]"  multiple="" accept=".zip">
      <input type="submit" value="Upload problem report(s)">
    </label>  
  </form>

我的蟒蛇

import flask
from werkzeug.wrappers import request
import os
app = flask.Flask("upload")

UPLOAD_FOLDER = './upload'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def get_html(page_name):
    html_file = open(page_name + ".html")
    content = html_file.read()
    html_file.close()
    return content

@app.route("/upload", methods=["POST"])
def upload():
    files = flask.request.files.getlist("file[]")
    if files.filename !='':
        for file in files:
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    return get_html("index")

这不是我所知道的最好的代码,但如果我不检查文件名,上传就可以了。

【问题讨论】:

    标签: python flask file-upload


    【解决方案1】:

    应该是这样的:

    files = flask.request.files.getlist("file[]")
    for file in files:
        if file.filename !='':
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], file.filename))
    

    正如错误信息提示的那样,你得到一个列表,而一个列表没有filename 属性,所以你需要检查列表中的项目。

    【讨论】:

    • 非常感谢,这确实是解决方案!我显然是一个初学者,在我已经投入了几个小时之后,你才救了我几个小时!!可悲的是,我没有足够的声誉来将此答案标记为有用,但是一旦我有足够的声誉,我会记得再次摇摆!
    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2016-06-06
    • 2011-02-26
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 2018-04-01
    • 2011-05-09
    相关资源
    最近更新 更多