2010-08-27 3 views
1

Je crée une action de contrôleur simple dans ASP.NET MVC 2 (sous le framework .NET 4.0) qui va redimensionner les fichiers.FileResult renvoyant un fichier corrompu

J'ai un contrôleur comme ça (je l'ai coupé vers le bas un peu):

public ActionResult GetFile(int fileId, string fileSource) { 
    FileInfo file = repo.FindFileById(fileId); 

    //do some resizing 

    string mimeType = string.Empty; 
    switch(file.Extension) { 
     case ".jpg": 
      mimeType = "image/jpg"; 
      break; 
     //some more stuff 
     default: 
      mimeType = "text/png"; 
      break; 
    } 

    return File(file.FullName, mimeType); 
} 

Sur le système de fichiers, il permet d'économiser bien, je peux voir le fichier redimensionnée, mais dans le navigateur de la le fichier ne rend pas.

J'ai utilisé Charles pour inspecter la réponse et il revient avec un statut HTTP de 200, mais l'image n'est pas visible.

Si j'essaie de sauvegarder l'image et de l'afficher, la visionneuse d'images Windows indique qu'elle est corrompue.

J'ai aussi essayé avec ZIP (sans redimensionnement;)) et il retourne un fichier ZIP corrompu.

Je suis sûr que je fais juste quelque chose de mal mais je ne peux pas pour la vie de moi le repérer.

Modifier

Je l'ai testé à la fois Cassini et IIS 7.5 (Windows 7) et recevoir le problème dans les deux cas.

+1

Je ne dis pas que cela explique votre problème, mais comme un commentaire de côté, ne doit pas être votre défaut « text/html »? –

+0

Untested poignarder dans le noir, essayez d'utiliser un FileResult au lieu d'un ActionResult? – ChadT

+0

Pourriez-vous fournir une version allégée de votre code de redimensionnement de l'image qui illustre le problème ainsi qu'un exemple d'image que nous pourrions utiliser pour reproduire ce comportement? –

Répondre

1

Je vous recommande de procéder par élimination. Commencez par une action simple et une image jpeg travail:

public ActionResult Index() 
{ 
    return File("test.jpg", "image/jpeg"); 
} 

Si cela ne vous pourriez alors travailler ne être avoir un autre problème (vous pouvez également essayer de vider le cache du navigateur). Si cela fonctionne remplacer le test.jpg par celui que vous avez, mais avant le redimensionnement, etc, jusqu'à ce que vous trouviez le problème.

0

Le type mime correct pour un jpeg est image/jpeg, pas image/jpg. Cela entraînera des problèmes.

Vous devriez également publier votre code de redimensionnement car il s'agit probablement de la cause de votre corruption. Que se passe-t-il si vous lisez juste l'amende et l'écrivez à nouveau?

0

Il s'avère que le problème est causé par un module de compression Http qui s'exécute sur le site, il essaie de transformer la réponse de l'image, en corrompant l'image.

0

Essayez d'utiliser FileResult au lieu de ActionResult

+1

L'OP a déjà posté une [réponse] (http://stackoverflow.com/a/3593586/3982001), expliquant ce que le problème était. –

Questions connexes