2016-05-31 104 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' 

某處它會工作,但我不知道在哪裏!我無法觸及參數的結構..任何想法?

編輯:我想這裏沒有結果書面 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

你作爲第三個參數傳遞了配置屬性?獲取和使用不同數量的參數,得到的配置選項作爲第二個參數,而後期使用它作爲第三個參數 –

回答

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 
    }); 
}