2014-11-05 13 views
6

Tôi đang sử dụng FileSaver.jsBlob.js vào ứng dụng JS Angular để lưu tệp PDF được dịch vụ REST trả về (trả về một mảng byte biểu thị tệp).Lưu một tệp PDF được trả về bởi dịch vụ

var headers = {headers: {"Authorization":"Bearer "+token, "Accept":"application/pdf"}}; 

    $http.get(URL, headers) 
    .success(function (data) { 
     var blob = new Blob([data], {type: 'application/pdf'}); 
     saveAs(blob, 'contract.pdf'); 
    }); 

tệp được lưu đúng loại và số trang là chính xác nhưng hoàn toàn trống. Mở nó bằng trình chỉnh sửa, hóa ra nó chỉ chứa phần đầu tiên của dữ liệu được máy chủ trả về, như nó bị cắt bớt.

Cảm ơn mọi người đã trợ giúp!

+1

Bạn đã giải quyết vấn đề này chưa? – ronnyfm

+0

Cùng một câu hỏi ở đây .. ;-) Bạn đã tìm thấy giải pháp chưa? Cảm ơn. –

+0

Cũng bị mắc kẹt về điều này. – user2085143

Trả lời

7

$ http.get có thể không xử lý dữ liệu nhị phân chính xác. Hãy thử $http({method: "GET", url: URL, responseType: "arraybuffer", ...})(see angularjs) để nhận một đối tượng nhị phân mà bạn có thể đưa vào cho dữ liệu.

Bạn cũng có thể sử dụng responseType: "blob" để bạn thậm chí không phải tạo var blob, nhưng tôi nghĩ rằng responseType có ít hỗ trợ trình duyệt hơn.

0

Thêm loại phản hồi vào đối số cấu hình đã hoạt động đối với tôi. Hãy thử:

var config = { responseType: 'blob', headers: {"Authorization":"Bearer "+token, 
"Accept":"application/pdf"}}; 

    $http.get(URL, config) 
     .success(function (data) { 
      var blob = new Blob([data], {type: 'application/pdf'}); 
      saveAs(blob, 'contract.pdf'); 
     }); 
Các vấn đề liên quan