Maison  >  Questions et réponses  >  le corps du texte

Tâche de file d'attente faisant une demande d'accès au fichier depuis Laravel

<p>Bonjour à tous, j'ai un travail Laravel en file d'attente pour insérer des enregistrements dans la base de données via un fichier importé par l'utilisateur. Mais chaque fois que j'accède à l'objet de requête dans le travail pour obtenir le fichier téléchargé, j'obtiens null. Cependant, le fichier est reçu normalement dans le contrôleur. Des idées? </p> <p>Recherchez la méthode d'importation dans le contrôleur comme suit : </p> <pre class="brush:php;toolbar:false;">importation de fonction publique (ImportPointRequest $request) { Storage::makeDirectory('import_logs'); $file = request()->file('file'); $fileName = 'importlog_date_' . date('Y-m-d') '-user_' . $logFile = 'import_logs/' . $readerTypes = ['xlsx' => Excel :: XLSX, 'xls' => Excel :: XLS, 'csv' => $link = route('file.show', ['import_logs', $fileName]); essayer { ExcelFacade::import(new PointsImportHeading(), $file); } catch (Exception $e) { return $this->returnBadRequest(config('point.error-codes.import-fail'), $e->getMessage()); } (nouveau PointsImport(auth()->user(), auth()->user()->account_id, $logFile))->queue( $file->getRealPath(), nul, $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')])); }</pré> <p>Recherchez la méthode getImportedFileContent dans le travail comme suit : </p> <pre class="brush:php;toolbar:false;">fonction protégée getUploadedFileContent() : tableau { return Excel::toArray(new PointsImportHeading(), request()->file('file')); }</pré> <p>Le problème est que cette partie <code>request()->file('file')</code> </p>
P粉762447363P粉762447363435 Il y a quelques jours526

répondre à tous(1)je répondrai

  • P粉852114752

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

    Votre méthode est incorrecte. Dans Laravel, le cycle de vie d'une requête commence lorsque la requête arrive sur le serveur et se termine lorsque la réponse est renvoyée au navigateur de l'utilisateur. Lorsque vous mettez une tâche en file d'attente dans Laravel, cela signifie que la tâche sera traitée plus tard, peut-être même sur un autre serveur. Lorsque le travail s'exécute réellement, le cycle de vie de la demande d'origine est terminé. Par conséquent, vous ne pouvez pas accéder aux données de demande dans une tâche en file d'attente.

    Si vous devez utiliser le fichier téléchargé dans une tâche en file d'attente, vous devez stocker le fichier téléchargé dans un emplacement auquel la tâche peut accéder. Il peut s'agir du système de fichiers de votre serveur ou d'un service de stockage cloud.

    Dans votre contrôleur vous avez stocké temporairement le fichier pour traitement avec Excel :

    $file = request()->file('file');

    Cependant, vous ne conservez pas le fichier, c'est pourquoi le fichier n'est pas disponible pendant l'exécution du travail. Vous devez stocker vos fichiers dans un endroit plus permanent.

    Après avoir stocké le fichier de manière permanente, vous pouvez lire le fichier à partir du nouvel emplacement.

    répondre
    0
  • Annulerrépondre