#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