2014-09-21 1 views
0

L'application doit permettre le téléchargement de fichiers Excel. Les fichiers sont stockés sur le disque dur du serveur et renvoyés à l'aide de la classe .NET File (ceci doit prendre en charge les en-têtes de type de contenu). Avec xlsx cela fonctionne bien. Avec xls sur le côté client, je reçois la réponse de type "application/octet-stream", ce qui entraîne un fichier Excel cassé.ASP.NET MVC Téléchargement de fichier - xls/xlsx

J'ai essayé le même scénario sur la machine de développement, cela fonctionne bien (l'IIS local renvoie correct "application/vnd.ms-excel"). J'ai fait de la journalisation dans la production, le type MIME est identifié correctement, donc le retour this.File (Path.Combine (pathDir, fileName), contentType, fileName); partie est correcte.

Puisqu'il fonctionne sur ma machine de dev, je suppose que c'est un problème d'IIS. Les paramètres Type MIME pour les fichiers xls et xlsx sont identiques sur mon ordinateur de développement et de serveur.

Le code de retour du fichier:

// just some helper maching extension to MIME Type 
    var contentType = IdentityFileType.GetFileType(fileName); 
    if (!string.IsNullOrEmpty(contentType)) 
    { 
     var pathDir = Path.Combine(
      ConfigurationManager.AppSettings["ContentDir"], ConfigurationManager.AppSettings["FileDirRel"]); 

     if (System.IO.File.Exists(Path.Combine(pathDir, fileName))) 
     { 
      // on log the contentType is "application/vnd.ms-excel", fileName "somefile.xls" 
      return this.File(Path.Combine(pathDir, fileName), contentType, fileName); 
     } 
    } 
    // else restore state and inform user 

Toutes les idées pourquoi il primeraient le type de contenu défini correctement et renvoyer l'octet-stream par défaut?

Répondre

0

essayer de modifier la configuration de votre serveur web

<system.webServer> 
    <staticContent> 
    <remove fileExtension="xls"/> 
    <mimeMap fileExtension="xls" mimeType="application/vnd.ms-excel"/> 
    </staticContent> 
</system.webServer> 
+0

Ajouté le code suggéré config, toujours obtenir 'octet-stream d'application /'. – FwR

+0

sont vos fichiers sur le serveur statique? Pourraient-ils être corrompus? Vous pouvez essayer de créer une réponse personnalisée sans utiliser la méthode de fichier MVC. – aleha

+0

Oui, ils sont statiques. J'ai vérifié, ils vont bien. Le problème se produit uniquement avec * .xls, ce qui renvoie un type de contenu incorrect et donc après l'enregistrement sur la machine client, le fichier est corrompu. Je vais regarder dans les réponses personnalisées, même si cela semble un peu frais généraux. – FwR

Questions connexes