douchuanchai2793 2015-08-10 16:35
浏览 35
已采纳

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!

  • 写回答

1条回答 默认 最新

  • dptrmt4366 2015-08-10 17:32
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?