L'enregistrement d'un PhpSpreadSheet par clic de bouton
J'essaie d'obtenir mon Laravel application à télécharger un fichier excel avec phpSpreadSheet une continuation de PhpExcel. Mais jusqu'à présent, je ne suis pas du tout avoir la chance avec elle. J'ai d'abord essayé de faire un Axios appel à l'aide d'un onClick mais cela ne fonctionne pas depuis le JS n'est pas permis d'enregistrer des choses. Après que j'ai essayé de joindre le bouton pour un Laravel cette action vient d'ouvrir une page vide.
Je ne sais pas si quelqu'un ici pourra m'aider, mais je vais garder espoir
Qu'entendez-vous par JS n'est pas permis d'enregistrer des choses?
J'ai regardé en ligne et quelque part, j'ai vu que JS n'a pas pu enregistrer sur votre ordinateur en raison de la sécurité resasons
Vous êtes à la recherche à tort, à l'aide d'axios vous avez besoin de trigger le téléchargement, ne pas effectuer l'enregistrement
Mais qui ne semble pas être possible avec ce package. Je utiliser un Axios appel à bâtir le fichier, puis utiliser une fonction de sauvegarde dans le php pour le sauver mais il devrait me demander, ou au moins de l'enregistrer localement, mais jusqu'à présent je n'ai eu aucun succès se soit.
J'ai regardé en ligne et quelque part, j'ai vu que JS n'a pas pu enregistrer sur votre ordinateur en raison de la sécurité resasons
Vous êtes à la recherche à tort, à l'aide d'axios vous avez besoin de trigger le téléchargement, ne pas effectuer l'enregistrement
Mais qui ne semble pas être possible avec ce package. Je utiliser un Axios appel à bâtir le fichier, puis utiliser une fonction de sauvegarde dans le php pour le sauver mais il devrait me demander, ou au moins de l'enregistrer localement, mais jusqu'à présent je n'ai eu aucun succès se soit.
OriginalL'auteur Ferdi van der Woerd | 2017-08-17
Vous devez vous connecter pour publier un commentaire.
Vous devez d'abord créer un point de terminaison dans vos itinéraires à l'appeler à l'aide d'ajax (axios dans votre cas):
Dans votre contrôleur:
Dans le cas où vous n'avez pas le fichier, vous pouvez l'enregistrer à php://output:
Maintenant, vous avez juste besoin d'appeler le point de terminaison
/spreadsheet/download
pour commencer le téléchargement, mais une normale<a href="/spreadsheet/download">Download</a>
serait de travailler.Espère que cela vous aide.
Si le fichier n'existe pas déjà, vous avez juste besoin de fournir une ressource directement à la méthode d'intervention, plutôt que d'en créer à partir du fichier sauvegardé.
Donc qui ressemblerait à quelque chose comme ça? fonction publique de téléchargement () { if (! empty($pathToTheFile)) { $fileContents = Stockage::disque ("local")->get($pathToTheFile); $response = Réponse::make($fileContents, 200); $response->header('Content-Type', Stockage:disque ("local") - >type mime($path)); return $response; } else { $fileContents = $writer->save('Product-Report.xlsx'); $response = Réponse::make($fileContents, 200); $response->header('Content-Type', Stockage:disque ("local") - >type mime($path)); return $response; } }
Cet exemple serait utilisé si vous avez déjà le fichier enregistré sur votre serveur.
l'erreur est sur cette ligne header('Content-Disposition: attachment; filename="file.xls"'); ajouter un "x" à la fin de file.xls pour le rendre header('Content-Disposition: attachment; filename="file.xlsx"')
OriginalL'auteur Asur