Загрузка файла, полученного из MongoDB с помощью Flask

#python #flask

#python #flask

Вопрос:

Я создаю веб-приложение для загрузки файлов в MongoDB и из него с помощью Flask. Сначала я буду искать соответствующую строку в базе данных MongoDB в конкретной коллекции, и если в каком-либо документе есть соответствующая строка, то мне нужно создать динамический URL (доступный для просмотра на странице поиска) для загрузки с использованием ObjectId. Как только я нажимаю динамический URL, он должен извлечь файл, хранящийся в MongoDB для этого конкретного ObjectId, и загрузить его. Я попытался изменить response.headers['Content-Type'] и response.headers["Content-Dispostion"] на исходные значения, но по какой-то причине загрузка работает не так, как ожидалось.

route.py

 @app.route('/download/<fileId>', methods = ['GET', 'POST'])
def download(fileId):
    connection = pymongo.MongoClient()

    #get a handle to the test database
    db = connection.test
    uploads = db.uploads

    try:
        query = {'_id': ObjectId(fileId)}
        cursor = uploads.find(query)

        for doc in cursor:
            fileName = doc['fileName']
            response = make_response(doc['binFile'])
            response.headers['Content-Type'] = doc['fileType']
            response.headers['Content-Dispostion'] = "attachment; filename=" fileName
            print response.headers

        return response
    except Exception as e:
        return render_template('Unsuccessful.html')
  

Что мне следует сделать, чтобы я мог загрузить файл (полученный из MongoDB — работает должным образом) с тем же именем файла и данными, которые я загрузил ранее?

Ниже приведен журнал недавнего запуска.

введите описание изображения здесь

Файл (в данном случае «Представление рабочих процессов с большими данными 1.pptx «), извлеченный из MongoDB, загружается с именем файла ObjectId, хотя я меняю имя файла на исходное имя файла.

введите описание изображения здесь

Пожалуйста, дайте мне знать, если я упустил какую-либо деталь. Я соответствующим образом обновлю сообщение.

Заранее спасибо,

Комментарии:

1. Постарайтесь помочь в понимании, а не просто нажимайте на понижение, не комментируя причину. Я попытался предоставить как можно больше информации о проблеме.

2. Попробуйте обернуть имя файла в «»: response.headers[‘Content-Disposition’] = «вложение; filename=»%s «» % fileName

3. Спасибо за ваш ответ. Я попытался перенести имя файла, но это та же проблема.

Ответ №1:

Спасибо @Bartek Jablonski за ваш вклад.

Наконец, я выполнил эту работу, немного изменив код и создав новую коллекцию в MongoDB (думаю, на этот раз мне повезло).

 @app.route('/download/<fileId>', methods = ['GET', 'POST'])
def download(fileId):
    connection = pymongo.MongoClient()

    #get a handle to the nrdc database
    db = connection.nrdc
    uploads = db.uploads

    try:
        query = {'_id': ObjectId(fileId)}
        cursor = uploads.find(query)

        for doc in cursor:
            fileName = doc['fileName']
            response = make_response(doc['binFile'])
            response.headers['Content-Type'] = doc['fileType']
            response.headers["Content-Dispostion"] = "attachment; filename="%s"" %fileName
        return response
    except Exception as e:
#          self.errorList.append("No results found."   type(e))
        return False