Angular не может загрузить файл из экспресса с помощью res.download - PullRequest
0 голосов
/ 31 декабря 2018

В моем приложении я создаю файл на сервере и затем хочу передать его пользователю через браузер.Я пробовал многочисленные

Вот экспресс-бэкэнд:

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

1 Ответ

0 голосов
/ 05 января 2019

Проблема заключалась в том, что моя ссылка на скачивание не включала элемент http:// URL, как описывает этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...