検索

ホームページ  >  に質問  >  本文

Laravelからファイルにアクセスするリクエストを行うキュータスク

<p>皆さん、こんにちは。ユーザーがインポートしたファイルを介してデータベースにいくつかのレコードを挿入するキューに入れられた Laravel ジョブがあります。しかし、アップロードされたファイルを取得するためにジョブ内のリクエスト オブジェクトにアクセスすると、必ず null が返されます。ただし、コントローラではファイルは正常に受信されます。何か案は? </p> <p>次のようにコントローラーでインポート メソッドを見つけます。</p> <pre class="brush:php;toolbar:false;">パブリック関数 import(ImportPointRequest $request) { Storage::makeDirectory('import_logs'); $file = request()->file('file'); $fileName = 'importlog_date_' . date('Y-m-d') . '-user_' . auth()->id() . '.xlsx'; $logFile = 'import_logs/' . $fileName; $readerTypes = ['xlsx' => Excel::XLSX, 'xls' => Excel::XLS, 'csv' => Excel::CSV]; $link = Route('file.show', ['import_logs', $fileName]); 試す { ExcelFacade::import(new PointsImportHeading(), $file); } catch (\Exception $e) { return $this->returnBadRequest(config('point.error-codes.import-fail'), $e->getMessage()); } (new PointsImport(auth()->user(), auth()->user()->account_id, $logFile))->queue( $file->getRealPath(), ヌル、 $readerTypes[request()->file('file')->getClientOriginalExtension()] )->chain([new AfterImportJob(auth()->id(), $logFile, $link)]); return $this->returnSuccess(trans('point::point.import-queued', ['module' => trans('point::point.point')])); }</pre> <p>次のようにジョブ内で get ImportFileContent メソッドを見つけます。 </p> <pre class="brush:php;toolbar:false;">保護された関数 getUploadedFileContent(): 配列 { return Excel::toArray(new PointsImportHeading(), request()->file('file')); }</pre> <p>問題は、この部分 <code>request()->file('file')</code> が常に null を返すことです。 </p>
P粉762447363P粉762447363458日前556

全員に返信(1)返信します

  • P粉852114752

    P粉8521147522023-09-04 09:39:51

    あなたの方法は間違っています。 Laravel では、リクエストのライフサイクルは、リクエストがサーバーに到着したときに始まり、レスポンスがユーザーのブラウザに送り返されたときに終了します。 Laravel でジョブをキューに入れると、そのジョブは後で、場合によっては別のサーバー上で処理されることになります。ジョブが実際に実行されると、元のリクエストのライフサイクルが終了します。したがって、キューに入れられたジョブ内のリクエスト データにはアクセスできません。

    アップロードされたファイルをキューに入れられたジョブで使用する必要がある場合は、ジョブがアクセスできる場所にアップロードされたファイルを保存する必要があります。これは、サーバーのファイル システムまたはクラウド ストレージ サービスです。

    Excel で処理するためにコントローラーにファイルを一時的に保存しました:

    リーリー

    ただし、ファイルは永続化されないため、ジョブの実行中はファイルを使用できません。ファイルをより永続的な場所に保存する必要があります。

    ファイルを永続的に保存した後、新しい場所からファイルを読み取ることができます。

    返事
    0
  • キャンセル返事