2012-12-15 6 views
5

Mogę pobrać nieprzetworzone dane z pliku, który żądam, ale nie mogę pobrać przeglądarki, aby udostępnić plik użytkownikowi. Czy muszę używać elementów iframe?Pobieranie plików do pracy między angularjs a express.js

//Client code 
    download_file: function (path, callback) { 
     $http.post('/download/client_file', {path:path}). 
      success(function(data, status, headers, config) { 
       console.log(data); //this contains the raw data of the res.download 
            //from the server. 
      }); 
    } 

    //server code 
    res.download(file); // the path is proper 
+0

Czy działa lepiej, jeśli wykonujesz HTTP GET? (aka emulacja tego, co się stanie, jeśli użytkownik kliknie link do pliku). –

+0

Nie miało znaczenia, czy użyłem GET czy POST. Nie miałem po prostu odpowiedniego obiektu danych formularza. –

Odpowiedz

2

Użyłem kodu poniżej w moim pliku usług do pobierania przedmiotów i działał świetnie. Dostałem go od http://filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads/

$('<form action="'+ url +'" method="'+ ('post') +'">'+inputs+'</form>') 
       .appendTo('body').submit().remove(); 
+1

Powiedziałbym +2, gdybym mógł. Niesamowite rozwiązanie. Jedną rzeczą do wyjaśnienia w tej odpowiedzi jest to, że 'input' może wyglądać tak:' 'gdzie' mydata' to jakiś obiekt z twój '$ zakres'. Zobacz mój pełny przykład na moim blogu: http://jessemon.blogspot.com/2013/11/download-data-from-angular-nggrid-as-csv.html – Jess

+0

Występuję w tym samym problemie - mam kontroler to robi $ http.put() do mojego głównego app.js. Odpowiedź danych, którą otrzymuję, jest także nieprzetworzonym wyjściem z pliku .csv i zastąpienie go powyższym nie daje mi "Błąd odniesienia: $ nie jest zdefiniowane" czy jest coś, czego mi brakuje? – MonsterWimp757

+1

@ MonsterWimp757 Jeśli chcesz użyć funkcji $ check, jeśli załadowałeś jquery przed obrotem w index.html – Eric

0

W zależności od typu pliku, jak i nagłówki są ustawione na nim, może się okazać, że znacznie łatwiej po prostu zadzwonić location.href="uriString"; od JS. Plik powinien zostać pobrany natychmiast, korzystając z okna, w którym już się znajdujesz. Jeśli to jest JSON lub dane tekstowe, być może będziesz musiał dostosować nagłówki, aby pobrać je zamiast renderować wbudowane ... ("Content-disposition: attachment", być może. ..)

Powiązane problemy