J'essaie de laisser un utilisateur télécharger une collection en tant que fichier json, mais je ne sais pas comment le faire sans stocker le fichier.

option 1 : télécharger sans stocker du tout

J'ai essayé quelque chose comme ça

return response()->download(WorkPersonalReport::all(), 'zapis_prac.json');

Cela ne fonctionne pas, car ce n'est pas un fichier. puis-je en faire un "pseudo fichier" ?

option 2 : créer un fichier, laisser le téléchargement se faire, supprimer le fichier

public function jsonExport() {
  $wprs = WorkPersonalReport::all();
  file_put_contents('assets/workPersonalReport.json', $wprs);

  return response()->download('assets/workPersonalReport.json', 'zapis_prac.json');
}

Avec

public function index() {
  unlink('assets/workPersonalReport.json');
}

L'une ou l'autre des options est-elle possible avec un code optimal ?

D'abord - juste pour créer un fichier temporaire, qui sera supprimé une fois le téléchargement terminé ?

Deuxième - unlink() le fichier après l'instruction return, au lieu de chaque fois que index() est appelé ?

2
narrei 22 oct. 2020 à 18:17

1 réponse

Meilleure réponse

Considérez l'extrait suivant ;

return response(WorkPersonalReport::all(), 200, [
    'Content-Disposition' => 'attachment; filename="collection.json"'
]);
1
ElektaKode 22 oct. 2020 à 15:36