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!

Donc ce qui se passe? À quel point est-il un échec? Ne par hasard vous avez un bloqueur de pop-up?
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