2009-07-13 26 views
26

Tôi có đoạn mã sau mà tôi đã loại bỏ khỏi bất kỳ dòng không cần thiết nào để rời khỏi trường hợp có thể sao chép minimun. Những gì tôi mong đợi là cho nó để trả lại hình ảnh, nhưng nó không. Theo như tôi thấy, tệp trả về một tệp trống:ASP.NET MVC FileStreamResult không hoạt động như dự định

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

Bạn có thể xác định mã này có vấn đề gì không? Trong trình gỡ lỗi, tôi có thể thấy rằng luồng phát triển về kích thước để có vẻ như đang nhận dữ liệu mặc dù tôi chưa thể xác minh đó là dữ liệu chính xác. Tôi không có ý tưởng làm thế nào để gỡ lỗi FileStreamResult chính nó.

Trả lời

66

Bạn cần phải chèn

stream.Seek(0, SeekOrigin.Begin); 

sau khi cuộc gọi đến

Image.Save() 

này sẽ tua lại dòng đến đầu của hình ảnh được lưu. Nếu không, luồng sẽ được đặt ở cuối luồng và không có gì được gửi tới người nhận.

+0

Câu trả lời thực sự thú vị. –

+0

Tôi đã thử điều này cho excel và nó đã không làm việc .. bất kỳ ý tưởng? – superachu

11

Thử tua lại MemoryStream. Các "con trỏ" là trái ở phần cuối của tập tin và không có gì để đọc cho đến khi bạn "tua lại" các dòng để bắt đầu.

image.Save(stream, ImageFormat.Jpeg); 
stream.Seek(0, SeekOrigin.Begin); 
return new FileStreamResult(stream, "image/jpeg"); 
Các vấn đề liên quan