2014-11-04 17 views
9

Podczas próby utworzenia funkcji pobierania plików na moim serwerze NodeJS napotkałem nieoczekiwane zachowanie. Mam interfejs API REST (ekspresowe), który wywołuje funkcję eksportu danych, który tworzy plik CSV na serwerze i używa res.download('path/to/file'), aby uruchomić pobieranie. Nagłówki odpowiedzi obejmująContent-Disposition: załącznik nie powodujący pobrania okna dialogowego

Content-Disposition:attachment; filename="indicators.csv" 
Content-Length:30125 
Content-Type:text/csv; charset=UTF-8 

więc wszystko wydaje się być w porządku.

Chodzi o to, że otrzymuję odpowiedź od serwera jako zwykły tekst. Odpowiedź zawiera wszystkie dane znajdujące się w pliku CSV, ale nie uruchamia okna dialogowego pobierania pliku przeglądarki, tak jak zamierzałem. Próbowałem zarówno w Chrome, jak i FF. Problem utrzymuje się w obu.

Wszelkie pomysły?

Aktualizacja

udało mi się zrobić to praca, tworząc fikcyjny formularz i przy użyciu jego przedstawienia działań, aby moje rozmowy AJAX. Ale to brzydki hack i wciąż szukam bardziej eleganckiego rozwiązania.

Odpowiedz

11

Nagłówki nie są problemem. Problem polega na tym, że pytasz o adres URL pobierania za pomocą wywołania ajax, które nie wywoła okna dialogowego pobierania przeglądarki. Twoje opcje sprowadzają się do:

  1. Użyj formularza, który został przesłany do adresu URL pobierania. Zamiast widzialną formę użytkownik ma do interakcji z, utworzyć formularz z JavaScript i przedkłada go programowo przez wywołanie form.submit - Handle file download from ajax post

  2. Punkt window.location do pobierania adresu URL. Można to zrobić w bieżącym oknie - download file using an ajax request, czy w nowym jeden - res.download() not working in my case

+0

Jak widzisz na moim pytaniu, opcja 1 jest tym, z czego skorzystałem. Ale muszę przyznać, że opcja 2 może być bardziej eleganckim rozwiązaniem w moim przypadku. – yarons

0

Można spróbować użyć innego typ zawartości, tak że nie będzie otwarta w postaci pliku tekstowego w przeglądarce:

Content-Type:application/ms-excel; charset=UTF-8 

Inną alternatywą może być użycie application/octet-stream jako mim -type, aby zdefiniować go jako plik do pobrania bez lepszego opisu.

Content-Type:application/octet-stream; charset=UTF-8 
+0

Próbowałem już tego. Nie działa – yarons