2009-07-13 21 views
26

Ho il seguente codice che ho rimosso da qualsiasi riga non essenziale per lasciare il caso riproducibile minimo. Quello che mi aspetto è che restituisca l'immagine, ma non lo fa. Per quanto posso vedere restituisce un file vuoto:ASP.NET MVC FileStreamResult non funziona come previsto

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

Riesci a identificare cosa c'è di sbagliato con questo codice? Nel debugger posso vedere che il flusso cresce di dimensioni, quindi sembra che stia ottenendo i dati anche se non sono stato in grado di verificare che siano i dati corretti. Non ho idea di come eseguire il debug di FileStreamResult stesso.

risposta

66

è necessario inserire

stream.Seek(0, SeekOrigin.Begin); 

dopo la chiamata a

Image.Save() 

Questa sarà riavvolgere il flusso per l'inizio del l'immagine salvata. Altrimenti il ​​flusso verrà posizionato alla fine del flusso e nulla verrà inviato al ricevitore.

+0

Davvero una bella risposta. –

+0

Ho provato questo per Excel e non ha funzionato .. qualche idea? – superachu

11

Provare a riavvolgere il MemoryStream. Il "cursore" è lasciato alla fine del file e non c'è nulla da leggere finché non si "riavvolge" il flusso all'inizio.

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