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) { // 失敗の通知をユーザーへ送るなど… } }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。