2009-07-13 11 views
26

Ich habe den folgenden Code, den ich aus nicht-essentiellen Linien entfernt, um den minimalen reproduzierbaren Fall zu verlassen. Was ich erwarte ist, dass es das Bild zurückgibt, aber es tut es nicht. Soweit ich sehen kann, gibt es eine leere Datei zurück:ASP.NET MVC FileStreamResult funktioniert nicht wie beabsichtigt

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"); 
} 

Können Sie identifizieren, was mit diesem Code falsch ist? Im Debugger kann ich sehen, dass der Stream in der Größe wächst, so scheint es die Daten zu bekommen, obwohl ich nicht in der Lage war zu überprüfen, dass es die richtigen Daten sind. Ich habe keine Ahnung, wie das FileStreamResult selbst zu debuggen ist.

Antwort

66

Sie benötigen diese spult den Strom zu Beginn des gespeicherten Bildes

stream.Seek(0, SeekOrigin.Begin); 

nach dem Aufruf von

Image.Save() 

einzufügen. Andernfalls wird der Stream am Ende des Streams positioniert und nichts wird zum Empfänger gesendet.

+0

Wirklich coole Antwort. –

+0

Ich habe dies für Excel versucht und es hat nicht funktioniert .. keine Ahnung? – superachu

11

Versuchen Sie, den MemoryStream zurückzuspulen. Der "Cursor" befindet sich am Ende der Datei und es gibt nichts zu lesen, bis Sie den Stream an den Anfang "zurückspulen".

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