Warteschlangenaufgabe, die eine Anfrage zum Zugriff auf die Datei von Laravel stellt
P粉762447363
2023-09-03 13:43:56
<p>Hallo zusammen, ich habe einen Laravel-Job in der Warteschlange, um einige Datensätze über eine vom Benutzer importierte Datei in die Datenbank einzufügen. Aber wenn ich im Job auf das Anforderungsobjekt zugreife, um die hochgeladene Datei abzurufen, erhalte ich null. Die Datei wird jedoch normal im Controller empfangen. Irgendwelche Ideen? </p>
<p>Suchen Sie die Importmethode im Controller wie folgt: </p>
<pre class="brush:php;toolbar:false;">public function import(ImportPointRequest $request)
{
Storage::makeDirectory('import_logs');
$file = request()->file('file');
$fileName = 'importlog_date_' . date('Y-m-d') .
$logFile = 'import_logs/' .
$readerTypes = ['xlsx' => Excel::XLSX, 'xls' => Excel::XLS, 'csv' =>
$link = route('file.show', ['import_logs', $fileName]);
versuchen {
ExcelFacade::import(new PointsImportHeading(), $file);
} Catch (Ausnahme $e) {
return $this->returnBadRequest(config('point.error-codes.import-fail'), $e->getMessage());
}
(new 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', ['module' => trans('point::point.point')]));
}</pre>
<p>Suchen Sie die Methode getImportedFileContent im Job wie folgt: </p>
<pre class="brush:php;toolbar:false;">protected function getUploadedFileContent(): array
{
return Excel::toArray(new PointsImportHeading(), request()->file('file'));
}</pre>
<p>Das Problem ist, dass dieser Teil <code>request()->file('file')</code> immer null zurückgibt. </p>
您的方法是不正确的。在Laravel中,请求的生命周期从请求到达服务器开始,当响应发送回用户的浏览器时结束。当您在Laravel中排队一个作业时,这意味着该作业将在稍后处理,甚至可能在不同的服务器上处理。当作业实际运行时,原始的请求生命周期已经结束。因此,您无法在排队的作业中访问请求数据。
如果您需要在排队的作业中使用上传的文件,您需要将上传的文件存储在作业可以访问的位置。这可以是您服务器的文件系统或云存储服务。
在您的控制器中,您已经临时存储文件以便使用Excel进行处理:
然而,您没有持久化文件,这就是为什么在作业运行时文件不可用的原因。您需要将文件存储在更持久的地方。
在永久存储文件后,您可以从新位置读取文件。