Я пытаюсь загрузить удаленно (т. Е. Через браузер) Mongo dump с сервера с помощью команды mongodump.Загрузка архива, созданного с помощью mongodump
Бэкэнда является сервером Колбы и как это:
@api.route('/export', methods=['GET'])
def exportDb():
subprocess.check_output(['mongodump','--archive=db.gz', '--gzip', '--db', 'my_db'])
response = make_response(open('db.gz', 'r').read())
response.headers["Content-Disposition"] = "attachment; filename=db.gz"
return response
Фронтэнд использует AngularJs и выглядит следующим образом:
$http({
method: 'GET',
url: '/intro/export'
}).then(function(response) {
var blob = new Blob([response.data], {type: 'application/zip, application/octet-stream'});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}
архив создан правильно на стороне сервера, но я не может передать его клиенту. Когда запрос отправляется, открывается новая вкладка для загрузки файла с именем после guid, поэтому не «db.gz», и этот файл не может быть открыт каким-либо клиентом архива, поэтому я, должно быть, что-то пропустил либо при его отправке, либо сохраняя его.
Любая помощь будет очень оценена.
Я думаю, что вопрос здесь что вы используете 'open ('db.gz', 'r'). read()', который читает ваш GZ в текстовом режиме (по умолчанию), где вы должны прочитать его в двоичном формате, чтобы сохранить данные внутри. Поэтому вместо 'r' попробуйте использовать' rb' в вашем исходном коде и посмотрите, работает ли он. Вот таблица флажков 'open': https://docs.python.org/3/library/functions.html#open –