2017-08-15 4 views
8

enter image description here J'ai généré un fichier Excel avec OpenXml 2.7.2 dans .NETCoreApp 1.1 et l'ai enregistré dans un dossier de projet. Ensuite, dans ma fonction, j'ai lu les octets et essayer de le retourner en tant que fichier. Je ne reçois pas d'erreur, mais dans la réponse je viens de récupérer le binaire. Donc ça a l'air de marcher mais ça ne se télécharge pas.Comment servir un fichier excel téléchargeable créé avec OpenXml, dans .NET Core

Voici mon code:

[HttpGet] 
[Route("export")] 
public IActionResult Export() 
    { 
     return File(System.IO.File.ReadAllBytes(filePath), 
     contentType: "application/octet-stream", 
     fileDownloadName: "MySheet.xlsx"); 

    } 

Si quelqu'un sait comment servir un fichier Excel téléchargeable dans le noyau .net laissez-moi savoir. Toute aide est la bienvenue, merci!

MISE À JOUR

Je ne suis pas sûr que la corruption est liée à la génération du fichier Excel avec OpenXml parce que même quand je tente d'exporter un fichier vide qui n'a pas été généré avec OpenXml je reçois le même message d'erreur disant "Le fichier est corrompu et ne peut pas être ouvert". Ce n'est pas non plus entièrement lié à Excel 2016 car je peux ouvrir d'autres fichiers Excel.

+0

Le code que vous avez devrait fonctionner. J'ai de la difficulté à comprendre quel est votre problème. Le fichier téléchargé sera livré en binaire? Quelle est cette image dans la question supposée représenter et quel outil est-il utilisé? Comment l'action est-elle appelée? – Nkosi

+0

L'image montre ce que je reçois dans la réponse de mon appel http, qui est le binaire Excel. Je ne veux pas ça. Je veux que le fichier soit sauvegardé sur un pc/mac sous le nom MySheet.xlsx. L'outil que j'ai utilisé pour voir la réponse était l'outil Chromes Inspect. J'appelle la route d'exportation de mon front qui est dans l'angle 2. – jonv562

+0

Si vous venez d'entrer l'URL dans le navigateur il vous invite à télécharger le fichier, ou au moins commencer à le télécharger si le navigateur est configuré pour le faire . – Nkosi

Répondre

2

J'ai trouvé un moyen de contourner le problème, de sorte que je n'ai pas besoin de lire le fichier et de le diffuser, ce qui semble être mon problème. Maintenant, ce que je fais est de générer l'excel et de retourner l'url du fichier Excel. Ensuite, dans la réponse de succès, j'appelle window.open().

this.export().subscribe(
     data => window.open(urlToExcelFile, "_blank"), 
     err => console.log(err) 
    );