2013-03-28 17 views
7

Korzystam z frameworku frontular angularJS i nodejs/express jako serwera zaplecza do wysyłania i odbierania JSON. Backend wysłał duży obiekt JSON do frontendu i zastanawiałem się, czy mogę pobrać obiekt JSON z frontendu w formacie CSV.Pobierz stronę klienta Json jako CSV

Dane są przechowywane jako json w zmiennej zasięgu: $scope.data w regulatorze kątowym. Następnie przekonwertowałem dane na ciąg znaków w formacie CSV w zmiennej $scope.CSVdata. Jak pobrać dane CSV do pobrania z przeglądarki klienta?

Wiem, że można ustawić nodejs, aby wysłać plik w formacie CSV, ale miło byłoby zachować backend czystego interfejsu API JSON.

+0

Dlaczego po prostu nie przekształcisz go po stronie klienta po jego uzyskaniu? Ponieważ używasz Node, to i tak będzie to ten sam kod, w ten sposób możesz zachować swój interfejs API w pełni JSON. Co dokładnie pytasz? Konwertowanie pliku JSON na CSV lub pobieranie danych do przycisku pobierania w Angular lub obu? –

+0

Pytam, jak uzyskać dane w formacie CSV od kąta do pobrania od klienta. Mniej mnie przejmuje konwersja do formatu CSV. Uaktualnię to pytanie za chwilę. – GTDev

+0

Istnieje naprawdę dobre rozwiązanie tutaj: http://stackoverflow.com/a/13903928/1804678 – Jess

Odpowiedz

8

Odwoływanie this post mam wrzucony razem szybki pokaz tego, jak można to zrobić za pomocą angularjs:

JavaScript Demo (Plunker)

mam zapakowane odwołanie kod Base64 w służbie i używać go w następujący sposób: :

$scope.downloadCSV = function() { 
    var data = Base64.encode($scope.CSVData); 
    window.location.href = "data:text/csv;base64," + data; 
}; 

Nie are some disadvantages tej metody jednak, jak wspomniano w komentarzach. Wyciągnąłem kilka punktów na stronie Wikipedii na ten temat. Udaj się tam, by zobaczyć pełną listę.

  • URI dane nie są buforowane oddzielnie od swoich zawierających dokumenty (np CSS lub html), w związku z czym zakodowane dane są pobierane każdym razem dokumenty zawierające zostaną ponownie pobrane.
  • Internet Explorer 8 ogranicza identyfikatory URI danych do maksymalnej długości 32 KB. (Internet Explorer 9 nie ma tego ograniczenia)
  • W IE 8 i 9 danych identyfikatory URI mogą być używane tylko do obrazów, ale nie do nawigacji lub pobierania plików generowanych przez JavaScript. [7]
  • Identyfikatory URI z kodowaniem Base64 są 1/3 razy większe niż ich odpowiednik binarny. (Jednak ten narzut zmniejsza się do 2-3%, jeśli serwer HTTP kompresuje odpowiedź za pomocą gzip).
  • Dane identyfikatory URI nie mają nazwy pliku, jak normalnie połączony plik. Podczas zapisywania używana jest domyślna nazwa pliku dla określonego typu MIME: .
  • [. . . ]
+0

Korzystanie z tego podejścia (pobieranie po stronie klienta) jest ograniczona rozmiar danych? Myślę, że to jest. – Jess

+0

Zobacz wady tego podejścia: http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages – Jess

+0

Dzięki za dodatkowe informacje - zaktualizowałem odpowiedź, aby ją uwzględnić. –