9
votes

Angularjs - Recevoir et télécharger CSV

J'utilise un programme NODEJS en tant que serveur et une application Web angularjs en tant que client.

Pour créer le CSV J'utilise la bibliothèque "Express-CSV" ( https://www.npmjs.com/package/express-csv ) p>

Voici mon côté serveur Code: p>

Définit: P>

$http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response){
            // HERE I NEED A WAY TO DOWNLOAD THE RECEIVED CSV
        });


0 commentaires

5 Réponses :


2
votes

Vous pouvez simplement naviguer:

location.href = "http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB";


2 commentaires

Cela fonctionne mais je reçois un fichier nommé "exportdb" sans fin. (Si j'ajoute le '.csv' c'est OK). Vous savez comment puis-je nommer le fichier sur le serveur avant d'envoyer?


@ Guyben-moshe, vous devez définir les en-têtes res.Setheader ("disposition de contenu", "pièce jointe; nom_file = '+ nom de fichier); res.Setheader ('type de contenu', mimeType);



1
votes

Vous pouvez créer une balise et cliquer dessus:

    $http.get("http://"+$localStorage.ip+":"+$localStorage.port+"/exportDB").success(function(response) {
        var dataURI = 'data:application/octet-stream;base64,' + btoa(response);
        $('<a></a>').attr({
            download:  'db.csv',
            href: dataURI
        })[0].click();
    });


0 commentaires

1
votes

Il existe des moyens de télécharger CSV. La première approche consiste à créer une balise et cliquez sur IT

Ajoutez le MIMEType dans ci-dessous Données de code: Application / Stream d'octet P>

if (window.navigator.msSaveOrOpenBlob){
                // base64 string
                var base64str = response;

                // decode base64 string, remove space for IE compatibility
                var newstr =base64str.replace(/\s/g, '');
                var binary = atob(newstr);

                // get binary length
                var len = binary.length;

                // create ArrayBuffer with binary length
                var buffer = new ArrayBuffer(len);

                // create 8-bit Array
                var view = new Uint8Array(buffer);

                // save unicode of binary data into 8-bit Array
                for (var i = 0; i < len; i++) {
                 view[i] = binary.charCodeAt(i);
                }

                // create the blob object with content-type "application/csv"               
                var blob = new Blob( [view], { type: mimeType });
                window.navigator.msSaveOrOpenBlob(blob, "Name your file here");
            }


0 commentaires

2
votes

J'ai confronté le même problème que les solutions mentionnées ci-dessus avec fonctionne bien avec Chrome et Firefox, mais pas avec Safari / Ie.

a essayé de suivre le piratage et cela a fonctionné pour moi-

Var URL = "http: //' et/+procalstorage.ip+ ':" + $ localtstorage.port +' / exportDB '; formulaire var = angulaire.Element (" "); forme.submit ();

Le téléchargement de fichier sera géré par le navigateur lui-même. Bien que la limitation est la limitation -

  1. Vous ne pourrez pas gérer les erreurs (le cas échéant) de votre appel http gettez appel :( Pour cela, essayez d'utiliser un bloc d'essai de JavaScript, mais n'a pas bien fonctionné ...
  2. .. vous ne serez pas capable de tester cette pièce de code :( :(

    Il y a une autre approche qui a fonctionné et c'était -

    Var URL = "http: //' et/+procalstorage.ip+ ':" + $ localtstorage.port +' / exportDB '; $ window.location.href = URL;

    Suggestions et discussions Bienvenue!


0 commentaires

0
votes

Ici, j'ai essayé de le rendre simple. Attribuez tous les enregistrements d'extrémité arrière que vous souhaitez afficher dans le fichier dans la variable appelée obj. Je vais juste le dire comme var obj = []. Et à l'intérieur de la fonction, ajoutez simplement le code ci-dessous. xxx


0 commentaires