Laravelにて、
viewのformからアクションを実行する際、
action="{{ route('upload_material_confirm') }}"
と記載していて、routingは
Route::post('/upload_material_confirm', [ 'uses' => 'UploadmaterialController@upload_material_confirm', 'as' => 'upload_material_confirm']);
としています。
この場合
「upload_material_confirm」
のメソッドが実行されることになりますが、
コントローラー側の記載は
Class XXX{ public function upload_material_confirm(Request $request) { $filename = $request->file('filedata')->getClientOriginalName(); $path = $request->file('filedata')->storeAs('material', $filename); $originalFile = $path; $data = $request->all(); $user = \Auth::user(); } private $originalFile ; // 元ファイルのパス情報 private $pdfFile ; // 変換したPDFファイルのパス情報 private $isNoExtension = FALSE ; // 拡張子が無い場合 private $isNoFilename = FALSE ; // ファイル名が無い場合 private $isPDF = FALSE ; // 元ファイルはPDFか private $isConvertible2PDF = FALSE ; // 元ファイルはPDFに変換対象か private $beConvertedPDF = FALSE ; // PDFへ変換済みか public function __construct($full_path) { $this->setOriginalFile($full_path) ; // 拡張子を調べてフラグを立てておく if( ! isset($this->originalFile["extension"]) ) { // 拡張子が無い場合。("extension"が未定義の場合) $isNoExtension = TRUE ; $this->originalFile["extension"] = "" ; } if( ! $this->originalFile["filename"] ) { // ファイル名が無い場合。("filename"が空文字列の場合) $isNoFilename = TRUE ; $this->originalFile["filename"] = "" ; } if( in_array( $this->originalFile["extension"], configODF::EXTENSIONS_PDF) ) { // 拡張子がPDFのものであれば $this->isPDF = TRUE ; } if( in_array( $this->originalFile["extension"], configODF::EXTENSIONS_MSOFFICE) ) { // 拡張子がMS Officeのものであれば、LibreofficeでPDF変換対象 $this->isConvertible2PDF = TRUE ; } } public function setOriginalFile($full_path) { if( isset( $this->originalFile ) ) { return ; } $this->originalFile = pathinfo($full_path) ; $this->originalFile["fullpath"] = $full_path ; } public function setPdfFile($full_path) { if( isset( $this->pdfFile ) ) { return ; } if( ! isset( $full_path ) ) { $full_path = configODF::OUTPUT_DIR . "/" . $this->originalFile["filename"] . ".pdf" ; } $this->pdfFile = pathinfo($full_path) ; $this->pdfFile["fullpath"] = $full_path ; } public function getOriginalFile($type) { if($type == "all") { return $this->originalFile ; } else if( $this->originalFile[$type] ) { return $this->originalFile[$type] ; } else { return $this->originalFile ; } } public function getPdfFile($type) { if($type == "all") { return $this->pdfFile ; } else if( $this->pdfFile[$type] ) { return $this->pdfFile[$type] ; } else { return $this->pdfFile ; } } public function convertOffice2PDF() { if( $this->beConvertedPDF ) { print "beConvertedPDF is TRUE\n" ; return ; } $this->beConvertedPDF = TRUE ; if( $this->isConvertible2PDF ) { // PDF変換対象であれば、LibreofficeでPDFに変換する $this->setPdfFile(NULL) ; $oFile = $this->getOriginalFile("all") ; $pFile = $this->getPdfFile("all") ; $srcfile = escapeshellarg( $oFile["fullpath"] ) ; $dstdir = escapeshellarg( configODF::TMP_OUTPUT_DIR ) ; // OfficeをPDFに変換するコマンドを取得。 $office2pdf_cmd = str_replace( array("[SRCFILE]", "[DSTDIR]"), array($srcfile, $dstdir), configODF::OFFICE2PDF_CMD) ; if ( exec($office2pdf_cmd, $output, $ret) ) { $tmp_pdf_file_path = configODF::TMP_OUTPUT_DIR . "/" . $oFile["filename"] . ".pdf" ; rename( $tmp_pdf_file_path, $pFile["fullpath"] ) ; return $this->pdfFile ; } else { } } else if( $this->isPDF ) { // 元ファイルがPDFであれば、変換せずに、オリジナルファイルそのものをPDFファイルとして登録する。 $this->pdfFile = $this->originalFile ; return $this->pdfFile ; } else { // 拡張子がMS OfficeでもPDFでもない場合は処理しない。 $this->pdfFile = NULL ; return FALSE ; } } }
となっており、「upload_material_confirm」
以外のpublic function XXX{}の部分も一緒に実行
したいのですが、どのように対応すればよいでしょうか。
ちなみに、XXXのメソッドをupload_material_confirmに組み込むことは難しそうです。
<背景>
office系ファイルをアップロード、pdf変換してデータベースに保存する仕組みを作成しています。
アップロード画面→確認画面→完了画面
の順にviewを作成しており、
アップロード画面の確認ボタンを押下した際、
アップロード画面にて一時的に保存されたファイルを
libreofficeを使用して変換し、確認画面でpdfのプレビューを
表示することを想定しています。
libreofficeを使用したpdf変換の一連の処理(いくつかのメソッド)は
用意があり(上記質問のメソッドXXXにあたります)、それらを確認ボタン押下時に動かし、
最後にpdf変換後のファイル画像とともに確認画面を返す処理にしたいです。
宜しくお願いいたします。
回答1件
あなたの回答
tips
プレビュー