В моем приложении я создаю файл на сервере и затем хочу передать его пользователю через браузер.Я пробовал многочисленные
Вот экспресс-бэкэнд:
app.get('/download', (req, res) => {
res.download('filename.txt', function (err) {
console.log(err);
});
})
Консольный вызов не возвращается, так что предположительно без ошибок.Вот что я делаю во внешнем интерфейсе, следуя совету здесь и здесь:
window.open('localhost:3000/download');
В результате у меня появляется пустое окно, но загрузка не происходит.Я также пытался это :
const filePath = 'localhost:3000/download/';
const link = document.createElement('a');
link.href = filePath;
link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
link.click();
Но в этом случае ничего не происходит.
Что я делаю не так?Я в недоумении, даже как отлаживать дальше.
Обновление 1
Спасибо @jal_a, я добился прогресса.Теперь я понимаю, что, если я вручную создаю окно и ввожу URL (как предложено), загрузка работает.Однако, когда окно запускается из приложения с использованием window.open(url)
, где url совпадает, окно открывается, но загрузка не начинается.Если я затем перейду к созданному окну, нажмите на ссылку и нажмите return ... вуаля!Оно работает!Как я могу инициировать загрузку из запущенного окна приложения?
Обновление 2
Спасибо @IceMetalPunk, я попытался это сделать, и в консоли появляется следующая ошибка - файл, который я 'я пытаюсь загрузить данные gps в формате gpx - что я вижу в ответе, но, похоже, ожидает JSON ??Нужно ли выполнять предварительную обработку для отправки файла?:
HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK",
url: "http://localhost:3000/download/", ok: false, …}
error:
error: SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse
...
text: "<?xml version="1.0" encoding="UTF-8"?>
↵<gpx version="1.1" xmlns="http://www.topografix.com/GPX/1/0">
↵ <rte>
↵ <name>undefined</name>
↵ <rtept lat="50.70373" lon="-3.07241" />
↵ <rtept lat="50.70348" lon="-3.07237" />
↵ </rte>
↵</gpx>"
__proto__: Object
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit:
ƒ}
message: "Http failure during parsing for http://localhost:3000/download/"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:3000/download/"
__proto__: HttpResponseBase