質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

6105閲覧

laravelでjobクラスに、$request->file('');で取得したファイルデータを渡す方法

laravel5

総合スコア32

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/10/08 09:39

laravelでjobクラスに、$request->file('');で取得したファイルデータを渡す方法

Job & Queue
https://readouble.com/laravel/5.5/ja/queues.html

Jobクラスに引数として、fileを渡そうとすると

Serialization of 'Illuminate\Http\UploadedFile' is not allowed

とエラーが発生します。

原因としては、
ProductExcelUpload()に引数として渡す際に、シリアライズ化しているようで、
fileは、UploadedFileクラス型のようで、このクラスはシリアライズ化出来ないとエラーを吐いているようです。

unserialize();等も色々試しましたが、上手く行きません。

ご教授していただけませんでしょうか?

※ Job & Queueを使用している意味は、
大量のデータが入ったExcelファイルをアップロード後、データをDB保存している為、
処理がかかり過ぎてしまう為、DB書き込み処理自体をQueue分離させようと思ったからです。

Controller内部処理

$file = $request->file('importable'); ProductExcelUpload::dispatch($file);

Jobクラス

<?php namespace App\Jobs; use App\Models\Product; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Facades\Artisan; class ProductExcelUpload implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * ジョブがタイムアウトになるまでの秒数 * * @var int */ // public $timeout = 0;//0秒 protected $file; /** * Create a new job instance. * * @return void */ public function __construct($file) { $this->file = $file; } /** * Execute the job. * * @return void */ public function handle() { // ini_set('max_execution_time', 8000000); $file = $this->file; エクセル読み込み処理... } /** * 失敗したジョブの処理 * * @param Exception $exception * @return void */ public function failed(Exception $exception) { // 失敗の通知をユーザーへ送るなど… } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

仮にUploadedFileをシリアライズ化出来たとしても
UploadedFileインスタンスに含まれるファイルパスはテンポラリな物なので永続的に保存されている保証がありません。

このような事をやりたい場合は、UploadedFileをstoreで一旦どこかにファイルとして保存して、jobにはファイルパスを渡すのがベターです

投稿2019/10/08 09:57

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問