Tugasan beratur membuat permintaan untuk mengakses fail daripada Laravel
P粉762447363
2023-09-03 13:43:56
<p>Hai semua, saya mempunyai tugas Laravel beratur untuk memasukkan beberapa rekod ke dalam pangkalan data melalui fail yang diimport oleh pengguna. Tetapi apabila saya mengakses objek permintaan dalam kerja untuk mendapatkan fail yang dimuat naik, saya mendapat null. Walau bagaimanapun, fail diterima seperti biasa dalam pengawal. Ada idea? </p>
<p>Cari kaedah import dalam pengawal seperti berikut: </p>
<pre class="brush:php;toolbar:false;">import fungsi awam(ImportPointRequest $request)
{
Storan::makeDirectory('import_logs');
$file = request()->file('file');
$fileName = 'importlog_date_' .
$logFile = 'import_logs/' $fileName;
$readerTypes = ['xlsx' => Excel::XLSX, 'xls' =>
$link = route('file.show', ['import_logs', $fileName]);
cuba {
ExcelFacade::import(new PointsImportHeading(), $file);
} tangkapan (Pengecualian $e) {
kembalikan $this->returnBadRequest(config('point.error-codes.import-fail'), $e->getMessage());
}
(PointsImport(auth()->user(), auth()->user()->account_id, $logFile))->queue(
$file->getRealPath(),
null,
$readerTypes[request()->file('file')->getClientOriginalExtension()]
)->chain([new AfterImportJob(auth()->id(), $logFile, $link)]);
return $this->returnSuccess(trans('point::point.import-queued', ['modul' =>trans('point::point.point')]));
}</pre>
<p>Cari kaedah getImportedFileContent dalam kerja seperti berikut: </p>
<pre class="brush:php;toolbar:false;">fungsi dilindungi getUploadedFileContent(): tatasusunan
{
kembalikan Excel::toArray(new PointsImportHeading(), request()->file('file'));
}</pre>
<p>Masalahnya ialah bahagian ini <code>request()->file('file')</code> </p>
Kaedah anda tidak betul. Dalam Laravel, kitaran hayat permintaan bermula apabila permintaan tiba di pelayan dan berakhir apabila respons dihantar semula ke penyemak imbas pengguna. Apabila anda membuat baris gilir kerja dalam Laravel, ini bermakna kerja itu akan diproses kemudian, mungkin juga pada pelayan yang berbeza. Apabila kerja benar-benar berjalan, kitaran hayat permintaan asal telah tamat. Oleh itu, anda tidak boleh mengakses data permintaan dalam kerja beratur.
Jika anda perlu menggunakan fail yang dimuat naik dalam kerja beratur, anda perlu menyimpan fail yang dimuat naik di lokasi yang boleh diakses oleh kerja itu. Ini boleh menjadi sistem fail pelayan anda atau perkhidmatan storan awan.
Dalam pengawal anda, anda telah menyimpan sementara fail untuk diproses dengan Excel:
Walau bagaimanapun, anda tidak meneruskan fail, itulah sebabnya fail tidak tersedia semasa kerja sedang dijalankan. Anda perlu menyimpan fail anda di tempat yang lebih kekal.
Selepas menyimpan fail secara kekal, anda boleh membaca fail dari lokasi baharu.