ASP.NET MVC - 實作 ASP.NET MVC 下載檔案功能

摘要:ASP.NET MVC - 實作 ASP.NET MVC 下載檔案功能

接觸 ASP.NET MVC 發現原來 下載檔案 在 MVC 中是很簡單的,廢話不多說以下就來實作嚕...

資料表:


步驟一:建立一個 LINQ to SQL


步驟二:撈取 檔案路徑資料 資料

Code:

public ActionResult Index()
{
 MyDataContext db = new MyDataContext();

 ViewData["Message"] = "Welcome to ASP.NET MVC!";

 IEnumerable<檔案路徑資料> result = from p in db.檔案路徑資料
            select p;

 return View(result);
}

步驟三:建立 下載檔案 的 ActionResult

Code:

public ActionResult GetFilePath(Guid uid)
{
 MyDataContext db = new MyDataContext();

 string result = (from p in db.檔案路徑資料
      where p.UID.Equals(uid)
      select p.FilePath).FirstOrDefault();

 if (!string.IsNullOrEmpty(result) && System.IO.File.Exists(Server.MapPath(result)))
  return File(System.IO.File.ReadAllBytes(Server.MapPath(result)),
   "application/unknown",
   HttpUtility.UrlEncode(System.IO.Path.GetFileName(result)));
 else
  return View();
}

步驟四:在 ASPX 中呈現 檔案路徑資料 的資料

Code:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.檔案路徑資料>>" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%= Html.Encode(ViewData["Message"]) %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
    <p>
        <%foreach (var item in Model)
          {%>
              <a href="<%=Url.Action("GetFilePath", "Home", new { uid = item.UID }) %>">按我下載檔案</a>
        <%} %>
    </p>
</asp:Content>

結果:



參考:
Writing A Custom File Download Action Result For ASP.NET MVC
ASP.NET MVC 檔案上傳下載是很方便的
HttpUtility.UrlEncode 方法 (String)
File.ReadAllBytes 方法