2009-07-13 8 views
26

J'ai le code suivant que j'ai retiré de toutes les lignes non essentielles pour laisser le cas reproductible minimun. Ce que je m'attends à ce qu'il renvoie l'image, mais ce n'est pas le cas. Pour autant que je peux voir, il retourne un fichier vide:ASP.NET MVC FileStreamResult ne fonctionne pas comme prévu

public ActionResult Thumbnail(int id) { 
    var question = GetQuestion(db, id); 
    var image = new Bitmap(question.ImageFullPath); 
    MemoryStream stream = new MemoryStream(); 
    image.Save(stream, ImageFormat.Jpeg); 
    return new FileStreamResult(stream, "image/jpeg"); 
} 

Pouvez-vous identifier ce qui ne va pas avec ce code? Dans le débogueur, je peux voir que le flux grossit de sorte qu'il semble obtenir les données bien que je n'ai pas pu vérifier que les données sont correctes. Je n'ai aucune idée comment déboguer le FileStreamResult lui-même.

Répondre

66

Vous devez insérer

stream.Seek(0, SeekOrigin.Begin); 

après l'appel à

Image.Save() 

Cela rembobiner le courant au début de l'image enregistrée. Sinon, le flux sera positionné à la fin du flux et rien n'est envoyé au récepteur.

+0

Réponse vraiment cool. –

+0

J'ai essayé ceci pour Excel et cela n'a pas fonctionné ... aucune idée? – superachu

11

Essayez de rembobiner le MemoryStream. Le "curseur" est laissé à la fin du fichier et il n'y a rien à lire jusqu'à ce que vous "rembobinez" le flux au début.

image.Save(stream, ImageFormat.Jpeg); 
stream.Seek(0, SeekOrigin.Begin); 
return new FileStreamResult(stream, "image/jpeg"); 
Questions connexes