将 flask-wtf 格式的文件保存到 MongoDB 的 GridFS
Save a file in a flask-wtf form to MongoDB's GridFS
我正在使用 flask-user 扩展 (https://flask-user.readthedocs.io/) 以及 mongoengine 适配器和 flask-wtf 创建一个 HTML 表单,该表单将接受多个文件(图像、mp4) .目标是使用 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)
`
我收到以下错误:
[...]File "/home/lucaspierru/Documents/IKADA/sos_sponsors/app/video/routes.py", line 35, in video1
fh = open(video1Form.logo.data, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'name_of_the_uploaded_file.ext'
是否可以直接指向文件的内容,而不仅仅是获取文件名而不先将其保存到服务器?
我发现了我的错误:
我忘记将 enctype="multipart/form-data"
属性添加到我的 HTML <form>
标签中,显然需要正确上传文件,否则它们将被视为文本数据。
我正在使用 flask-user 扩展 (https://flask-user.readthedocs.io/) 以及 mongoengine 适配器和 flask-wtf 创建一个 HTML 表单,该表单将接受多个文件(图像、mp4) .目标是使用 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)
`
我收到以下错误:
[...]File "/home/lucaspierru/Documents/IKADA/sos_sponsors/app/video/routes.py", line 35, in video1 fh = open(video1Form.logo.data, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'name_of_the_uploaded_file.ext'
是否可以直接指向文件的内容,而不仅仅是获取文件名而不先将其保存到服务器?
我发现了我的错误:
我忘记将 enctype="multipart/form-data"
属性添加到我的 HTML <form>
标签中,显然需要正确上传文件,否则它们将被视为文本数据。