[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が表示されます。