2016-05-29 85 views
1

我嘗試使用FileSaver從服務器上下載生成的PDF。但是,這不是工作。下載生成的PDF使用客戶端的FileSaver和服務器端的Snappy

在Laravel框架中,我使用Snappy從HTML創建PDF文件。

$pdf = \PDF::loadView('pub.view', $data); 
//$pdf->save('myfile.pdf'); //It's saved successfully. 
return $pdf->download('printing.pdf'); 

從客戶端,我使用AngularJS的$資源服務獲取PDF文件。

printPDF: { 
      method: 'GET', 
      headers: { 
       accept: 'application/pdf' 
      }, 
      responseType: 'arraybuffer', 
      cache: true, 
      transformResponse: function (data) { 
       var pdf; 
       if (data) { 
        pdf = new Blob([data], { 
         type: 'application/pdf' 
        }); 
       } 
       return { 
        response: pdf 
       }; 
      }, 
      url:'/u/:id/exportTopdf', 
      params:{id:'@id'} 
     } 

服務器響應後,FileSaver會保存該文件。

myService.printPDF({id: myId}, 
function successCallback(response){  

    saveAs(response, 'filename.pdf'); //FileSaver function 

}, function errorCallback(response){ 

}); 

運行時,這個問題是發生在瀏覽器控制檯:

`TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided`. 

我覺得FileSaver使得這個問題,但我不知道如何解決它。

+0

我修好了。我的問題是響應不是blob文件。響應是對象。我必須在響應中提取blob數據並存入saveAs函數。我通過瀏覽器的下載器下載它。但是,FDM(免費下載管理器)在瀏覽器下載後會抓住它。我如何讓FDM在瀏覽器之前捕獲它? –

+0

FDM(免費下載管理器)無法下載blob文件。 –

回答

1
param = { 
    action: "downloadReport", 
}; 
$http({ 
    method: 'POST', 
    url: 'http://localhost:8080/ivftcwcm2/services/fundTransferServices/downloadFile', 
    //url:'http://localhost:8080/FundTransferUI/resources/locales/Disclosure.pdf', 
    data: param, 
    responseType: 'arraybuffer' 
}).then(function(response) { 
    var file = new Blob([response.data], { 
    type: 'application/pdf' 
    }); 
    var fileURL = URL.createObjectURL(file); 
    var a = document.createElement('a'); 
    a.href = fileURL; 
    a.target = '_blank'; 
    a.download = 'pdfFile.pdf'; 
    document.body.appendChild(a); 
    a.click(); 
}, function(response) { 
    alert('call failed'); 
}); 
相關問題