2017-02-27 50 views
0

我有一個應用程序,其中前端是在angularjs和後端與symfony開發的。angularjs無法顯示api文件

我需要有這樣一個路徑:http://example.com/api/invoices/file?file=foo

所以我有這個我FileController內:

/** 
    * Matches /invoices/file/{filename} exactly 
    * 
    * @Route("/invoices/file/{filename}", name="get_invoice_file") 
    */ 
    public function getInvoiceFileAction(string $filename, Request $request) 
    { 
     $path = $this->get('kernel')->getRootDir() . '/../web/uploads/invoices/' . $filename; 

     if (!file_exists($path)) { 
      return new Response('file not found', 404); 
     } 

     $file = file_get_contents($path); 
     $headers = [ 
      'Content-Type' => 'application/pdf', 
      'Conteng-Length' => filesize($path) 
     ]; 

     return new Response($file, 200, $headers); 
    } 

裏面我angularjs應用程序我有這個讓我的前端控制器內的響應:

vm.getInvoices = function() { 
      vm.loading = true; 
      apiResolver.resolve('[email protected]', { "file": vm.searchFile }).then(function(response) { 
       vm.loading = false; 

       var file = new Blob([response], {type: 'application/pdf'}); 
       var fileURL = URL.createObjectURL(file); 
       vm.file = $sce.trustAsResourceUrl(fileURL); 

      }); 
     }; 

轉到我的網頁我有這個:

<embed ng-src="{{vm.file}}" style="width:200px;height:200px;"></embed> 

當我呈現頁面時,我看到一個200響應,所以文件存在,但到html中我有一個空的空間,而不是PDF文件。 內嵌入標籤有這樣的:

<embed style="width:200px;height:200px;" ng-src="blob:http://localhost:3000/d32d87d1-6582-42e3-85ae-dc174ca5a473" src="blob:http://localhost:3000/d32d87d1-6582-42e3-85ae-dc174ca5a473"> 

如果我複製一個瀏覽器中的URL返回我不能加載文件。

後端和前端位於不同的文件夾中,並且pdf不能通過公共鏈接查看這些頁面受到jwt系統的保護。

如何在頁面內顯示pdf? 我做錯了什麼?

回答

0

確保JWT 授權令牌在請求中傳遞。如果沒有,則將其傳遞給Blob對象。

如果提到以下令牌傳遞嘗試更換embedobject

<object data="{{vm.file}}" style="width:200px;height:200px;" type="application/pdf"></object> 
+0

我想如果令牌文件已經由前端下載不是必需的。讓我知道如果上面的答案適合你 –

+0

沒有改變嵌入對象不工作對不起 –