Поврежденный zip-файл, загруженный в угловой

0

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

         $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"? Я также пробовал "октет/поток", и он также загружает поврежденный ZIP файл. Любая помощь будет очень бесценной! Благодарю.

  • 0
    Срини вы проверили: github.com/eligrey/FileSaver.js/issues/156
  • 0
    Проверка ссылки. Он работает с простым запросом xhr, но не по угловому http.post по странным причинам. Я надеюсь, что это не портит его.
Показать ещё 4 комментария
Теги:
express
blob

1 ответ

2
Лучший ответ

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню