Сохраните файл в виде «flask-wtf» в GridFS MongoDB - PullRequest
0 голосов
/ 25 января 2019

Я использую расширение колбы-пользователя (https://flask -user.readthedocs.io / ) вместе с адаптером mongoengine и flask-wtf для создания HTML-формы, которая будет принимать несколько файлов (изображения, mp4). Цель состоит в том, чтобы напрямую хранить эти файлы в MongoDB с использованием GridFS, но я не могу заставить его работать, не сохранив сначала изображение локально на сервере фляги ...

Вот мой нерабочий код:

@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'

Можно ли указывать непосредственно на содержимое файла, а не просто получить имя файла, не сохранив его сначала на сервере?

1 Ответ

0 голосов
/ 07 февраля 2019

Я нашел свою ошибку:

Я забыл добавить атрибут enctype="multipart/form-data" в мой тег HTML <form>, и, очевидно, он необходим для правильной загрузки файлов, иначе они будут считаться текстовыми данными.

...