2014-09-07 32 views
5

Tôi có một dự án MVC nơi tôi muốn người dùng có thể tải xuống một tệp excel chỉ với một cú nhấp chuột. Tôi có đường dẫn cho các tập tin, và tôi dường như không thể tìm thấy câu trả lời của tôi thông qua google.Cách tải tệp xuống máy khách từ máy chủ?

Tôi muốn để có thể làm điều này với một nút đơn giản tôi có trên trang cshtml tôi:

<button>Button 1</button> 

Làm thế nào tôi có thể làm điều này? Bất kỳ trợ giúp nào cũng được đánh giá rất cao!

Trả lời

11

Nếu tệp không nằm trong thư mục ứng dụng của bạn và không thể truy cập trực tiếp từ ứng dụng khách, bạn có thể có hành động điều khiển sẽ truyền trực tuyến nội dung tệp tới ứng dụng khách. Điều này có thể đạt được bằng cách quay một FileResult từ hành động điều khiển của bạn bằng cách sử dụng File phương pháp:

public ActionResult Download() 
{ 
    string file = @"c:\someFolder\foo.xlsx"; 
    string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
    return File(file, controntType, Path.GetFileName(file)); 
} 

và sau đó thay thế nút của bạn với một neo trỏ đến controller action này:

@Html.ActionLink("Button 1", "Download", "SomeController") 

Ngoài ra việc sử dụng một neo bạn cũng có thể sử dụng biểu mẫu html:

@using (Html.BeginForm("Download", "SomeController", FormMethod.Post)) 
{ 
    <button type="submit">Button 1</button> 
} 

Nếu tệp nằm bên trong một số không thể truy cập từ thư mục khách của ứng dụng của bạn như App_Data bạn có thể sử dụng phương pháp MapPath để xây dựng con đường vật lý đầy đủ để tập tin này bằng một đường dẫn tương đối:

string file = HostingEnvironment.MapPath("~/App_Data/foo.xlsx"); 
+0

gì nếu tập tin trong máy chủ khác nhau? giả sử tên máy chủ là "VUP-1"? và giả sử đường dẫn là "c: \ someFolder \ foo.xlsx" -> trong máy chủ VUP-1 –

2

HTML:

<div>@Html.ActionLink("UI Text", "function_name", "Contoller_name", new { parameterName = parameter_value },null) </div> 

Bộ điều khiển:

public FileResult download(string filename) { 
     string path = ""; 
     var content_type = ""; 
     path = Path.Combine("D:\file1", filename); 

     if (filename.Contains(".pdf")) 
     { 
      content_type = "application/pdf"; 
     } 
     return File(path, content_type, filename); 
} 
Các vấn đề liên quan