2016-05-31 2 views
1

У меня есть запрос POST, как это:ArrayBuffer AngularJs POST запрос

$scope.myFunction = function (name, id, value) { 
     $http.post(/retrievePDFFiles, { 
        name: name, 
        id: id, 
        value: value 
       }).success(function(data, headers) { 
        var filename = headers('filename'); 
        if(data.byteLength > 250) { 
         var blob = new Blob([data], {type : 'application/pdf;charset=utf-8'}); 
         saveAs(blob, filename); 
        } else { 
         console.log("Error"); 
        } 

       }).error(function(data) { 
        console.log(data); 
       }); 
} 

С помощью этого вызова я отправить некоторые параметры, чтобы сохранить их в виде таблицы в моей БД, и как ответ у меня есть поток PDF. Запрос на сервер возвращает правильно 200 и все параметры исправлены, и все сохраняется в db, но файл PDF не работает. У меня ошибка в консоли:

SyntaxError: Unexpected token % 

и если я отлаживаю запрос, он переходит в функцию .error. Я думаю, проблема заключается в том, что он не признает, что ему нужно загрузить поток, и я не знаю, что он не работает. Я думаю, что просто добавление

responseType : 'arraybuffer' 

где-то он будет работать, но я не знаю, где! Я не могу прикоснуться к структуре параметров. Любая идея?

EDIT: я попытался, как написано здесь без каких-либо результатов How to read binary data in AngularJS in an ArrayBuffer?

+0

Возможный дубликат [Как читать двоичные данные в AngularJS в ArrayBuffer?] (http://stackoverflow.com/questions/16791295/how-to-read-binary-data-in-angularjs-in -an-arraybuffer) –

+0

Это не дубликат, я уже пробовал этот путь без успеха –

+0

Вы передали свойства конфигурации в качестве третьего аргумента? get и post использовать другое количество аргументов, get имеет параметры конфигурации как второй аргумент, а пост использует его как третий аргумент –

ответ

0

Попробуйте это:

app.factory('apiService', ['$http', function($http){ 
    return { 
     downloadFile: function(url, file) { 
      return $http({ 
       url: url, 
       method: 'POST', 
       data: file, 
       responseType: 'arrayBuffer' 
      }); 
     } 
    }; 
}]); 

контроллер

$scope.download = function(name, id, value) { 
    //form the payload for file download 
    var payload = { 
     name: name, 
     id: id, 
     value: value 
    }; 

    //execute service to download 
    apiService.downloadFile('/retrievePdfFiles', payload).then(function(response) { 
     //download the blob 
     var contentType = response.headers()['content-type'] || octetStreamMime; 
     var blob = new Blob([response.data], contentType); 
    }).catch(function(response){ 
     //there's been an error 
    }); 
} 
Смежные вопросы