Laravel:将存储/应用程序中安全存储的文件的URL提供给jquery库

Laravel:将存储/应用程序中安全存储的文件的URL提供给jquery库

问题描述:

I have stored my PDF files using the storage API. To let the browser read PDF I could use the Response::make() but I am using the pdfObject jquery library to display it embedded. And the problem is while using the library, I have to provide the url of pdf:

var pdf = new PDFObject({
   url: **"THE URL TO THE PDF",**
   pdfOpenParams: {
   navpanes: 0,
   toolbar: 0,
   statusbar: 0,
   view: "FitV"
}

How can I give the URL of the securely stored PDF to the library? Any help appreciated!

我使用存储API存储了我的PDF文件。 为了让浏览器读取PDF,我可以使用Response :: make(),但我使用pdfObject jquery库来嵌入它。 问题是在使用库时,我必须提供pdf的URL: p>

  var pdf = new PDFObject({
 url:**“THE URL to THE  PDF“,** 
 pdfOpenParams:{
 navpanes:0,
 toolbar:0,
状态栏:0,
视图:”FitV“
} 
  code>  pre> 
  
 

如何将安全存储的PDF的URL提供给库? 非常感谢! p> div>

You can make a new "loader" controller, from which you can return a pdf header with the desired file. Then instead of calling the file directly, pass its encrypted name as a parameter to the controller and decode it inside:

var pdf = new PDFObject({
    url: "site.com/controller/method/<?php Crypt::encrypt('filename.pdf') ?>",
    //...
}

Controller:

Route::get('/controller/method/{filename}', function($filename) {
    // Laravel is ignoring the header method and is sending a plain html/txt :(
    // So a normal php header can do the workaround
    header("Content-type: application/pdf");

    $filename = '/url/to/pdf/' . Crypt::decrypt($filename);

    $response = Response::make(readfile($filename), 200);
    $response->header('Content-Type', 'application/pdf');
    return $response;
});

P.S. The Laravel code is not tested and will mostly likely not work (I am little rusty with it), I tested with pure PHP though, and it worked.