2013-03-28 4 views
7

Utilizzo il framework di frontend angularJS e nodejs/express come server di backend per inviare e ricevere JSON. Il backend ha inviato un grande oggetto JSON al frontend e mi chiedevo se potevo scaricare l'oggetto JSON dal frontend in formato CSV.Scarica Client Side Json come CSV

I dati vengono memorizzati come json in una variabile di ambito: $scope.data in un controller angolare. Quindi ho convertito i dati in una stringa in formato CSV nella variabile $scope.CSVdata. Come posso scaricare i CSVdata dal browser client?

So che il nodo può essere impostato per inviare un file in formato CSV, ma sarebbe bello mantenere il back-end un api JSON pulito.

+0

Perché non lo converti solo dal lato client dopo averlo ricevuto? Dato che stai usando Nodo, sarebbe comunque lo stesso codice, e in questo modo puoi mantenere la tua API completamente JSON. Inoltre, cosa stai chiedendo esattamente? Conversione da JSON a CSV o acquisizione dei dati in un pulsante di download in Angular o entrambi? –

+0

Sto chiedendo come ottenere dati in formato CSV da angolare per il download da un client. Sono meno preoccupato di convertirlo in formato CSV. Aggiornerò la domanda in un secondo – GTDev

+0

C'è una soluzione davvero buona qui: http://stackoverflow.com/a/13903928/1804678 – Jess

risposta

8

Riferimento this post ho buttato manifestazione insieme veloce su come questo può essere fatto utilizzando AngularJS:

JavaScript Demo (Plunker)

ho avvolto il codice Base64 si fa riferimento in un servizio, e utilizzarlo nel modo seguente :

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

ci are some disadvantages a questo metodo tuttavia, come accennato nei commenti. Ho tirato fuori alcuni punti elenco dalla pagina di Wikipedia su questo argomento. Andate laggiù per l'elenco completo.

  • URI di dati non vengono memorizzati nella cache separatamente dai loro contenenti documenti (ad esempio CSS o HTML file), quindi i dati codificati vengono scaricati ogni volta che i documenti contenenti sono ri-scaricati.
  • Internet Explorer 8 limita gli URI dei dati a una lunghezza massima di 32 KB. (Internet Explorer 9 non ha questa limitazione)
  • In IE 8 e 9, gli URI di dati possono essere utilizzati solo per immagini, ma non per la navigazione o download di file generati da JavaScript. [7]
  • Gli URI di dati con codifica Base64 hanno dimensioni 1/3 volte superiori rispetto al loro equivalente binario. (Tuttavia, questo overhead è ridotto al 2-3% se il server HTTP comprime la risposta utilizzando gzip)
  • Gli URI di dati non portano un nome file come farebbe normalmente un file collegato. Quando si salva, un nome file predefinito per il tipo MIME specificato è generalmente utilizzato.
  • [. . . ]
+0

Utilizzando questo approccio (download lato client) la dimensione dei dati è limitata? Io penso che sia. – Jess

+0

Vedere gli svantaggi di questo approccio: http://en.wikipedia.org/wiki/Data_URI_scheme#Disadvantages – Jess

+0

Grazie per le informazioni aggiuntive - Ho aggiornato la risposta per includerla. –