Je génère un fichier xlsx
basé sur une entrée utilisateur dans express
. L’information est soumise via une demande de post
et je voulais renvoyer le contenu du fichier via res.download(...)
.
Si je le fais, j’obtiens des “ordures” dans le champ de data
de ma réponse ajax
.
J’ai essayé d’inviter un téléchargement en utilisant cette solution, mais le contenu est toujours “ordures”.
Voici mon contrôleur angular:
$ scope.generateSoldGoodsReport = function () { reportService.generateSoldGoodsReport ({ startDate: $ scope.startDate, endDate: $ scope.endDate }) .then (fonction (rapport) { var blob = new Blob ([rapport], {type: 'application / xlsx'}); $ scope.url = (window.URL || window.webkitURL) .createObjectURL (blob); }) }
et voici mon service:
generateSoldGoodsReport: function (dates) { var deferred = $ q.defer () $ http.post ('/ api / secure / generateSoldGoodsReport', dates) .then (fonction (réponse) { deferred.resolve (response.data) }) retour différé.promise }
et voici mon code côté serveur:
sendFileResponse = function (res) { fonction de retour (err, fileDetails) { si (err) { res.json ({ erreur: 1, message: err.message, détaillé: err.errors }) } autre { res.download (fileDetails.path + '/' + fileDetails.fileName) } } }
Finalement, j’ai fini par utiliser une solution dans laquelle, dans une demande de post
j’ai généré le rapport et lorsque la réponse a été envoyée au client, j’ai fait une demande d’ get
à un emplacement prédéfini où le rapport généré était stocké. Je n’aime pas cette solution car j’utilise deux requêtes au lieu d’une.