Как скачать ZIP-файл во всех браузерах

0

Это то, что я сейчас имею:

express.js

app.get('/downloadZip', function(req, res) {
  var file = req.query.downloadURL;
  var filename = path.basename(file);
  var mimetype = 'application/zip';

  res.setHeader('Content-disposition', 'attachment');
  res.setHeader('Content-type', mimetype);

  var filestream = fs.createReadStream(file);
  filestream.pipe(res);
});

мой контроллер

$http({
  method: "GET",
  url: '/downloadZip',
  params: {
    downloadURL: 'myZip.zip'
  },
  responseType: 'arraybuffer'
}).then(
  function success(data, status, headers, config) {
    $log.debug('downloadZip success: ', data);

    var blob = new Blob([data], {type: 'application/octet-stream'});
    // using FileSaver.js
    saveAs(blob, 'newZipName.zip');
  },
  function error(error) {
    $log.debug('downloadZip error: ', error);
  });

При таком подходе кажется, что файл ok - выход $log.debug показывает ArrayBuffer размером 5 Мб для data, что является правильным размером файла. НО, файл всегда загружается как 1Kb и явно не открывается.

Я пытаюсь FileSaver.js в приведенном выше примере, но я также попытался использовать angular.element('<a/>') и т.д., И это всегда приводит к загрузке 1Kb.

Есть ли что-нибудь, что я могу сделать, чтобы загрузить полный ZIP правильно?

Редактировать:

Я понял это - см. Ответ ниже. Одна из этих глупых ошибок. Но, по крайней мере, есть какой-то хороший бесплатный код выше для тех, кто хочет скачать ZIP файлы;)

  • 0
    Если бы вы сказали мне, что у вас за сайт, я мог бы его сломать. /downloadZip?downloadURL=package.json
  • 0
    @ Бесконечно интересно. Вы могли бы предложить более безопасный подход?
Теги:
express

1 ответ

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

Все, что мне было нужно, это data.data.

Поскольку это было содержимое полученного объекта data:

Object {data: ArrayBuffer, status: 200, config: Object, statusText: "OK"}

Поэтому мне пришлось указать дочерние data, содержащие ArrayBuffer...

var blob = new Blob([data.data], {type: 'application/octet-stream'});

Ещё вопросы

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