[0031]プログラムで作成したPDFをストレージ(Storage)でUPし、指定URLで開く

■Storageの利用

[0027]Lalavel5.7 日本語でPDF作成し表示もしくは自動ダウンロードの続きで、そのまま表示でも自動ダウンロードでもなく、サーバへ保存して指定したURLで開くようにするまでの手順を記載します。

まず、サーバの/file_up/data/ 配下にストレージ(Storage)でPDFを配置していきたいので、filesystems.phpのdisksに追加します。

config/filesystems.php

              
   'disks' => [

        'local' => [
            'driver' => 'local',
            'root'   => storage_path('app'),
        ],
        'upload_dir' => [
            'driver' => 'local',
            'root'   => '/file_up/data/',
        ],
    ],
              
            

upload_dirという名前(任意)でディレクトリを/file_up/data/にしました。

ストレージ(Storage)にPDFをUPします。

XXXController.php

              
//PDFを作成するプログラムの最後から記述。これまでは「[0027]Lalavel5.7 日本語でPDF作成し表示もしくは自動ダウンロード」を参照。
$pdf = PDF::loadView('pdf.index', compact(['image_data','setArr']))
	->setPaper('a4')->setWarnings(false);
//もしディレクトリがなければ作成
if(!file_exists("/file_up/data/")){
	mkdir("/file_up/data/");
}
//Storageを利用するときは、use Storage;をする。test.pdfという名前で/file_up/data/に保存するため、disk('upload_dir')を追加
Storage::disk('upload_dir')->put("test.pdf",$pdf->stream());
              
            

これでプログラムで作成したPDFがtestの名前で/file_up/data/に保存される。

あとは任意のURLにてPDFファイルを表示するため、ルーティングの設定をroutes/web.phpに追加します。

web.php

              
//PDF表示
Route::get('pdf_view/{id}', 'PdfViewController@show');
    			
            

次にコントローラ(Controller)を追加します。ルーティングの設定で指定した通り、名前を「PdfViewController」にします。

PdfViewController.php

              
public function show($id){
        $file = '/file_up/data/test.pdf';
        $response = \Response::make(\File::get($file));
        $response->header('Content-Type', 'application/pdf');
        $response->header('Pragma', 'no-cache');
        $response->header('Content-Disposition','inline');
        $response->header('filename',$file);
        return $response;
}
    			
            

サンプルではidの運用をしていないですが、実際はPDF保持時にデータベースに情報を登録しているので、idでどのPDFを呼び出すか指定します。サンプルはtest.pdfにしています。

https://www.XXXXX.com/pdf_view/1 このような接続でPDFが表示されます。