Поврежденный zip-файл, загруженный в угловой - PullRequest
0 голосов
/ 30 мая 2018

Угловой код клиента :

         $http.post('/zip', {
            id: _id
        })
        .success(function (data, status, headers, config) {
            var blob = new Blob([data], {type: "application/zip"});
            var contentDisp = headers('content-disposition');
            if (contentDisp && /^attachment/i.test(contentDisp)) {
                var fileName = contentDisp.toLowerCase()
                    .split('filename=')[1]
                    .split(';')[0]
                    .replace(/"/g, '');
                //The below command works but generates a corrupt zip file.
                FileSaver.saveAs(blob, fileName);
            }
        })
        .error(function () {
            console.log("Could not download");
        });

Код сервера NodeJS :

        app.route('/zip/')
        .post(function(req, res) {

          var output = fs.createWriteStream(join(outdir, outzipfile));
          //Using s3zip to archive.
          s3Zip
           .archive({ s3: s3Client, bucket: bucket}, folder, s3_files)
           .pipe(output);

          output.on('close', function() {
             //This sends back a zip file.
             res.download(outPutDirectory + outputBcemFile);
          });

          output.on('error', function(err) {
             console.log(err);
             return res.status(500).json({error: "Internal Server Error"});
          });

        });

Хотя FileSaver.saveAs работает и загружает zip-архивФайл, похоже, поврежден.Является ли тип "application / zip" правильным?Я также попытался "octet / stream" , и он также загружает поврежденный zip-файл.Любая помощь будет очень ценной!Спасибо.

1 Ответ

0 голосов
/ 30 мая 2018

Это ошибка, упомянутая в Git по ссылке ниже:

https://github.com/eligrey/FileSaver.js/issues/156

Чтобы решить эту проблему, необходимо добавить: responseType: 'arraybuffer' в заголовки запроса $ http, и он будетработа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...