【问题标题】:Save a file in a flask-wtf form to MongoDB's GridFS将 flask-wtf 形式的文件保存到 MongoDB 的 GridFS
【发布时间】:2019-06-19 13:02:02
【问题描述】:

我正在使用 flask-user 扩展 (https://flask-user.readthedocs.io/) 以及 mongoengine 适配器和 flask-wtf 来创建一个可以接受多个文件(图像、mp4)的 HTML 表单。目标是使用 GridFS 将这些文件直接存储在 MongoDB 中,但是如果不先将图像本地存储在烧瓶服务器上,我就无法让它工作......

这是我的非工作代码:

@bp.route('/video1', methods=['GET', 'POST'])
@login_required
def video1():
    video1Form = Video1Form()
    if request.method == 'POST' and video1Form.validate_on_submit():
        newVideo1 = Video1(
            slogan = video1Form.slogan.data,
            objectif = video1Form.objectif.data,
            stat1 = video1Form.stat1.data,
            stat2 = video1Form.stat2.data
        )
        name = secure_filename(str(current_user.id) + "__" + "logo.png")
        fh = open(video1Form.logo.data, 'rb')
        newVideo1.logo.put(fh, filename=name, content_type = "image/jpeg")
        newVideo1.save()
        return redirect(url_for('video.download'))
    if video1Form.errors:
        flash(video1Form.errors, 'alert-danger')
    return render_template('video/video1.html', video1Form=video1Form)
`

我收到以下错误:

[...]文件“/home/lucaspierru/Documents/IKADA/sos_sponsors/app/video/routes.py”,第 35 行,视频 1 fh = open(video1Form.logo.data, 'rb')

FileNotFoundError: [Errno 2] 没有这样的文件或目录:'name_of_the_uploaded_file.ext'

是否可以直接指向文件的内容,而不仅仅是获取文件名而不先将其保存到服务器?

【问题讨论】:

    标签: mongodb flask mongoengine flask-wtforms gridfs


    【解决方案1】:

    我发现了我的错误:

    我忘记将enctype="multipart/form-data" 属性添加到我的HTML <form> 标记中,显然需要正确上传文件,否则它们将被视为文本数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 2011-10-19
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      相关资源
      最近更新 更多