2012-01-31 24 views
5

tôi có những hành động sau đây trong điều khiển của tôiASP.net MVC ActionResult corrupts file excel khi trở về từ MemoryStream

public ActionResult DownloadExcel() 
     { 
      //create and populate Excel file here 
      C1XLBook testBook = new C1XLBook(); 
      //populate it here 

      MemoryStream ms = new MemoryStream(); 
      testBook.Save(ms, FileFormat.Biff8); 

      return File(ms, "application/ms-excel", "test-file.xls");   
     } 

Khi mở tập tin, tôi nhận được thông Excel nói rằng các tập tin không phù hợp với mở rộng và tệp mở ra bị hỏng.

Nếu tôi lưu các tập tin trên ổ đĩa cứng và gửi lại từ đó, mọi thứ đều tốt:

return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls"); 

Tôi ban đầu nghĩ rằng Save chức năng corrupts nó khi lưu nó vào MemoryStream, vì vậy tôi lưu và nạp lại nó và nó đã được trả lại cho người dùng - khi được lưu trên Ổ cứng và quay trở lại từ đó, thay vì từ MemoryStream

Bất kỳ ý tưởng nào? Tôi không thích lưu tập tin vào ổ cứng .... ngoài ra tôi có thể lưu nó vào MemoryStream và trả lại nó từ đó?

Một linh cảm mà tôi có là có lẽ MemoryStream không nên được sử dụng để trả về các tệp trong MVC, vì mọi yêu cầu đều bị cô lập?

Trả lời

5

Có lẽ bạn cần tua lại luồng bộ nhớ (đặt ms.Position = 0;) trước khi chuyển nó đến kết quả? Sau khi cuộc gọi đến Save vị trí của nó sẽ ở cuối, không phải là bắt đầu.

+0

cảm ơn! Điều đó là vậy đó! – sarsnake

Các vấn đề liên quan