AngularJS - Получение неверного zip после загрузки во время распаковки - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно скачать zip-файл, отправив запрос по почте. Во внутреннем интерфейсе они архивируют файл и отправляют.

Внутренние значения, которые они устанавливают

Content-Disposition →attachment;
filename="sample.zip"
Content-Type →application/zip 

Код интерфейса:

downloadMethod = function (path, item) {
      var promise = $http({ 
          method: "POST",
          data: item,
          url: API_SERVER.url+path,
          headers: { 'Content-Type': 'application/zip; charset=UTF-8'},
          responseType: 'arraybuffer'
      });
      promise.success(function(response, status, headers, conf) { 
        return response;
      }).error(function(response){
        return response;
      });
      return promise;
  };

В случае успеха я сохраняю файл с помощью Filesaver

var blob = new Blob([data)], {type:"application/zip"});
            saveAs(blob, "sample.zip");

Файл загружается. Но при извлечении файла я получаю ошибку

ОШИБКА: ЦЕНТРАЛЬНАЯ КАТАЛОГ НЕ НАЙДЕНА

, а также получение файла не может быть открыто или не является допустимым zip-файлом.

Но когда я пытаюсь поразить API от почтальона, он загружается, и я могу извлечь файл.

1 Ответ

0 голосов
/ 05 апреля 2019

Замените методы .success и .error на .then и .catch методы:

downloadMethod = function (path, item) {
      var promise = $http({ 
          method: "POST",
          data: item,
          url: API_SERVER.url+path,
          headers: { 'Content-Type': 'application/zip; charset=UTF-8'},
          responseType: 'arraybuffer'
      });
      promise.then(function(response) { 
        ̶r̶e̶t̶u̶r̶n̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶;̶
        return response.data;
      }).catch(function(response){
        ̶r̶e̶t̶u̶r̶n̶ ̶r̶e̶s̶p̶o̶n̶s̶e̶;̶
        throw response;
      });
      return promise;
  };

Устаревшие .success и .error методы игнорируют операторы возврата .

Также обратите внимание, что подписи отличаются.

Для получения дополнительной информации см.

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