10
votes

Téléchargement client d'un fichier ZIP généré par serveur

Avant que quelqu'un le dit: "Duplicate", je veux juste m'assurer que les gens savent que j'ai déjà examiné ces questions:

1) utilise angulaire et PHP, pas sûr de ce qui se passe ici (je n'ai pas t savoir PHP): télécharger le fichier zip et déclencheur La boîte de dialogue "Enregistrer le fichier" à partir de la méthode angulaire p>

2) Impossible d'obtenir cette réponse pour faire quoi que ce soit: Comment télécharger un fichier zip à l'aide d'angulaire p>

3) Cette personne peut déjà télécharger, qui est déjà passé le point que je suis essayer de comprendre: Télécharger le fichier zip externe de angulaire déclenchée sur un bouton Action P>

4) Pas de réponse pour celui-ci: du serveur nodejs p>

5) Je ne sais pas quelle langue est-elle même: https://stackoverflow.com/questions/35596764/zip-file-download-utilisateur- Angularjs-Directive P>

Compte tenu de ces questions fortes>, si cela reste un duplicata, je m'excuse. Voici, encore une autre version de cette question. P>

Mon client angulaire 1.5.x me donne une liste de titres, dont chacun dispose d'un fichier associé. Mon nœud 4.x / Express 4.x Server prend cette liste, obtient les emplacements de fichiers, crée un fichier ZIP, à l'aide de SPRP-ZIP à partir de NPM, puis des flux qui figurent dans la réponse. Je souhaite ensuite que mon client initie l'option "Télécharger un fichier" du navigateur. p>

voici mon code client (angulaire 1.5.x): p> xxx pré>

nœud (4.x) code avec express-zip em >, https://www.npmjs.com/package/express-zip :

Exception: {"description":"Access is denied...<stack trace>}


6 commentaires

Alors, que se passe-t-il? A quel moment fait-il échouer? Avez-vous par hasard avoir un bloqueur pop-up?


Y a-t-il une erreur? Pouvez-vous télécharger le fichier si vous tapez l'URL http: // localhost / requête / bulkdownload? Titres = 123 manuellement?


Oh tirer! Désolé, laissez-moi mettre à jour cela.


Roland Starke: Le navigateur semble juste tourner lorsque je le fais, mais éventuellement, oui, il a renvoyé un _tmp_zipfile.zip! Cependant, j'ai débogué le code du serveur et je reçois la bonne gamme de titres, les emplacements de fichiers, et il est injecté dans le resp.zip correctement, jusqu'à présent, je pouvais dire à une série de console.logs.


Roland, je reçois toujours l'erreur refusée. Ajout de console.log Affiche les 2 paramètres d'entrée pour le rappel attendu pour REEP.ZIP, qui, selon leur API, n'est pas nécessaire: github.com/thrackle/express-zip/blob/master/lib/express-zip. JS et ces valeurs étaient" null 4838 "que j'attends.


Peut-être que c'est-à-dire gère des blobs comme origine croisée? Vous pouvez sauter que tout cela ajax blob STUP Si vous venez d'ouvrir l'URL directement comme window.open ('/ requête / bulkdowlload? title = xxx'); mais comme idbevishold a dit que peut-être être bloqué à cause de la pupup bloqueurs. Voici quelques façons de le faire: Stackoverflow.com/questions/11620698/...


4 Réponses :


2
votes

J'ai mis à jour mon BulkTownload code> pour utiliser $ window.open (...) code> au lieu de $ http.get (...) code >:

function bulkdownload(titles){
    titles = titles || [];
    if ( titles.length > 0 ) {
        var url = '/query/bulkdownload?';
        var len = titles.length;
        for ( var ii = 0; ii < len; ii++ ) {
            url = url + 'titles=' + titles[ii];
            if ( ii < len-1 ) {
                url = url + '&';
            }
        }
        $window.open(url);
    }
};


0 commentaires

7
votes
var zip_file_path = "" //put inside "" your path with file.zip
var zip_file_name = "" //put inside "" file name or something
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = zip_file_path;
a.download = zip_file_name;
a.click();
document.body.removeChild(a);

1 commentaires

Le fichier zip ne dispose pas du nom de fichier zip. Comment pouvons-nous faire le fichier zip prendre ce nom 'zip File_Name'?



1
votes

Comme indiqué dans Cette réponse , i ont utilisé la fonction JavaScript ci-dessous et je suis maintenant capable de télécharger le contenu byte [] code> le contenu avec succès.

fonction pour convertir le flux de tableau d'octets (type de chaîne) à l'objet BLOB: P>

byte[] myByteArray = /*generate your zip file and convert into byte array*/ new byte[]();
return new ResponseEntity<byte[]>(myByteArray , headers, HttpStatus.OK);


0 commentaires

7
votes

Utilisez celui-ci:

var url="YOUR ZIP URL HERE";
window.open(url, '_blank');


0 commentaires