2011-01-18 42 views
6

phần Trước câu hỏi:asp.net MVC FileStreamResult

Tôi có thông tin trong DB và tôi muốn để có được nó từ db và lưu nó như .txt tập tin cho khách hàng.

Tôi đã làm điều đó với asp.net thông thường. nhưng trong mvc chưa. Thông tin của tôi không phải là hình ảnh. Thông tin này về các dân tộc

tôi xem để This site

phần thứ hai của câu hỏi:

Tôi muốn tải tập tin cho khách hàng. Không có vấn đề gì khi tải xuống một tệp nhưng tôi muốn tải xuống 3 tệp cùng lúc với 1 yêu cầu. Nhưng nó không thể được thực hiện. Vì vậy, tôi quyết định tạo tệp zip và tạo liên kết. Khi người dùng nhấp vào liên kết, người dùng sẽ tải xuống cho người dùng.

Bạn nghĩ sao? Làm theo cách này có tốt không?

Thứ ba phần của câu hỏi: (mới)

Làm thế nào tôi có thể xóa các tập tin .zip cũ từ danh mục sau succes tải? hay cách khác. Cho phép nói với dịch vụ sẽ chạy trên máy chủ.

+0

Cảm ơn người đã chỉnh sửa câu hỏi của tôi – AEMLoviji

Trả lời

12

Bạn có thể có những hành động điều khiển sau đó sẽ lấy thông tin từ các cơ sở dữ liệu và ghi nó vào dòng đáp ứng cho phép khách hàng để tải về nó:

public ActionResult Download() 
{ 
    string info = Repository.GetInfoFromDatabase(); 
    byte[] data = Encoding.UTF8.GetBytes(info); 
    return File(data, "text/plain", "foo.txt"); 
} 

và theo quan điểm của bạn cung cấp một liên kết đến hành động này :

<%= Html.ActionLink("Downoad file", "Download") %> 
+0

có tôi đã chọn nó. Nhưng Encoding.UTF8.GetBytes() chấp nhận chuỗi như chuỗi. nhưng kết quả của tôi từ Repository.GetInfoFromDatabase(); sẽ không phải chuỗi đơn giản. nó có thể là thông tin như FirstName, LastName, Patronymic ... – AEMLoviji

+0

@AEMLoviji, trong trường hợp này bạn cần sử dụng một lớp dịch vụ. Lớp dịch vụ này sẽ gọi phương thức kho lưu trữ của bạn và tạo ra một chuỗi hoặc bất kỳ định dạng nào bạn muốn gửi thông tin cho khách hàng từ mô hình. Sau đó, bộ điều khiển của bạn sẽ gọi phương thức lớp dịch vụ sẽ trả về chuỗi và luồng cho máy khách. –

+0

có nó là cách đơn giản nhưng không tốt. tôi nghĩ vậy. có cách nào khác để chuyển đổi IEnumreable thành byte []? – AEMLoviji

3

Bạn có thể xóa tệp tạm thời được trả về bằng cách sử dụng Bộ lọc hành động như thế này. Sau đó áp dụng thuộc tính cho phương thức hành động MVC của bạn.

public class DeleteTempFileResultFilter : ActionFilterAttribute 
    { 
     public override void OnResultExecuted(ResultExecutedContext filterContext) 
     { 
      string fileName = ((FilePathResult)filterContext.Result).FileName; 

      filterContext.HttpContext.Response.Flush(); 
      filterContext.HttpContext.Response.End(); 

      System.IO.File.Delete(fileName); 
     } 
    }