2009-07-13 17 views
26

Minimun yeniden üretilebilir durumda bırakmak için gerekli olmayan satırlardan çıkardığım aşağıdaki kodu kullanıyorum. Beklediğim şey, görüntüyü döndürmesidir, ama değil. Görebildiğim kadarıyla boş bir dosyaya geri dönüyor:ASP.NET MVC FileStreamResult amaçlandığı gibi çalışmıyor

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

Bu kodun nesi yanlış olduğunu tespit edebilir misiniz? Hata ayıklayıcısında, akımın boyut olarak büyüdüğünü görebiliyorum, bu yüzden verileri doğru şekilde doğrulayamadığım halde veri alınıyor gibi görünüyor. FileStreamResult'un kendisinin nasıl hata ayıklanacağı hakkında hiçbir fikrim yok.

cevap

66

Kaydedilen görüntünün başlangıcına akışını sarar

Image.Save() 

Bu çağrısının ardından

stream.Seek(0, SeekOrigin.Begin); 

eklemek gerekir. Aksi halde akış, akımın sonunda konumlandırılacak ve alıcıya hiçbir şey gönderilmeyecektir.

+0

Gerçekten serin cevap. –

+0

Bunu excel için denedim ve işe yaramadı .. herhangi bir fikir? – superachu

11

MemoryStream'i geri sarmayı deneyin. "İmleç", dosyanın sonunda kalır ve akışı "başa" geri sarıncaya kadar okunacak hiçbir şey yoktur.

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