Le téléchargement du Client d'un serveur de fichier zip généré
Avant que quelqu'un dit, "double", je veux juste m'assurer, que des gens le savent, que j'ai déjà examiné ces questions:
1) Utilise angulaire et php, vous ne savez pas ce qui se passe ici (je ne sais pas PHP): Télécharger le fichier zip et de déclencher "enregistrer le fichier" boîte de dialogue à partir angulaire de la méthode
2) ne Peut pas obtenir cette réponse à tout faire: comment faire pour télécharger un fichier zip en utilisant angulaire
3) Cette personne peut d'ores et déjà télécharger, lequel est passé le point que j'essaie de comprendre:
Télécharger externe fichier zip à partir angulaire déclenchée sur un bouton d'action
4) Pas de réponse pour celle-ci:
le téléchargement .fichier zip à partir de serveur nodejs
5) je ne sais pas quelle est la langue même est:
https://stackoverflow.com/questions/35596764/zip-file-download-using-angularjs-directive
Compte tenu de ces questions, si c'est encore un doublon, je m'en excuse. Ici, encore, une autre version de cette question.
Mon angulaire 1.5.X client me donne une liste de titres, qui ont chacun un fichier associé. Mon Nœud 4.X/Express 4.X server prend cette liste, obtient les emplacements de fichier, crée un fichier zip, à l'aide de l'express-zip de mnp, et transmet ensuite ce fichier de retour dans la réponse. Ensuite, je veux que mon client pour lancer le navigateur "télécharger un fichier" option.
Voici mon code client (Angulaire 1.5.X):
function bulkdownload(titles){
titles = titles || [];
if ( titles.length > 0 ) {
$http.get('/query/bulkdownload',{
params:{titles:titles},
responseType:'arraybuffer'
})
.then(successCb,errorCb)
.catch(exceptionCb);
}
function successCb(response){
//This is the part I believe I cannot get to work, my code snippet is below
};
function errorCb(error){
alert('Error: ' + JSON.stringify(error));
};
function exceptionCb(ex){
alert('Exception: ' + JSON.stringify(ex));
};
};
Nœud (4.X) code avec express-zip, https://www.npmjs.com/package/express-zip:
router.get('/bulkdownload',function(req,resp){
var titles = req.query.titles || [];
if ( titles.length > 0 ){
utils.getFileLocations(titles).
then(function(files){
let filename = 'zipfile.zip';
//.zip sets Content-Type and Content-disposition
resp.zip(files,filename,console.log);
},
_errorCb)
}
});
Voici mon successCb dans mon code client (Angulaire 1.5.X):
function successCb(response){
var URL = $window.URL || $window.webkitURL || $window.mozURL || $window.msURL;
if ( URL ) {
var blob = new Blob([response.data],{type:'application/zip'});
var url = URL.createObjectURL(blob);
$window.open(url);
}
};
Le "blob" la partie semble bien fonctionner. Vérifier dans IE débogueur, il ne ressemble à un fichier de flux d'octet de l'information. Maintenant, je crois que j'ai besoin d'obtenir que blob dans le certains HTML5 directive, pour lancer le "Enregistrer le Fichier sous" à partir du navigateur. Peut-être? Peut-être pas?
Depuis de 90% de nos utilisateurs sont à l'aide de IE11, je teste tous mes angulaire dans PhantomJS (Karma) et IE. Lorsque j'exécute le code, j'obtiens le vieux "Accès refusé" d'erreur dans une fenêtre d'alerte:
Exception: {"description":"Access is denied...<stack trace>}
Suggestions, précisions, réponses, etc. sont les bienvenus!
est-il une erreur? vous pouvez télécharger le fichier si tapez l'url
http://localhost/query/bulkdownload?titles=123
manuellement?Oh, mince! Désolé, permettez-moi de mise à jour.
Roland Starke: le navigateur semble juste à tourner quand je fais ça, mais finalement, oui, il a renvoyé un _tmp_zipfile.zip! Cependant, j'ai débogué le code du serveur, et je suis de la gamme de titres, les emplacements de fichier, et il est injecté dans le resp.zip correctement, autant que je pourrais dire à partir d'une série de la console.journaux.
peut-être que ie gère blobs comme origine de la croix? vous pouvez passer de l'ensemble de l'ajax blob genre de choses si vous venez d'ouvrir directement l'url comme
window.open('/query/bulkdownload?title=xxx');
Mais comme idbehold dit que peut-être est bloquée à cause de la pupup-bloquants. voici quelques façons de le faire: stackoverflow.com/questions/11620698/...
OriginalL'auteur westandy | 2016-06-21
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur atom
Utiliser celui-ci:
OriginalL'auteur Chinmay235
J'ai mis à jour mon
bulkdownload
de la méthode à utiliser$window.open(...)
au lieu de$http.get(...)
:J'ai uniquement testé dans IE11.
OriginalL'auteur westandy
Comme indiqué dans cette réponse, j'ai utilisé ci-dessous la fonction Javascript et je suis maintenant en mesure de télécharger le
byte[] array
contenu avec succès.Fonction pour convertir le tableau d'octets (flux de type de chaîne de caractères) à l'objet blob:
Un c'est comment j'ai appeler cette fonction et économiser de l'objet blob avec FileSaver.js (obtention de données via Angular.js
$http.get
):Note: je suis l'envoi de la
byte[] array
(Java Côté Serveur) comme ceci:OriginalL'auteur Bahadir Tasdemir