demoshop

demo, trying to be the best_

ASP.NET MVC 在RC1 版本以後對於檔案的上傳與下載多了一些支援,剛好最近有處理到檔案上傳、下載的部份,紀錄一下方便以後查看。

根據ASP.NET  Rrelease Notes 上寫的對於檔案上傳與下載的改變讓我想來試試看是否真的那麼便利,測試環境很簡單,開啟ASP.NET RC1版本的專案,我直接對於 Home/Index.aspx 修改頁面加上一個 form如下

<% using (Html.BeginForm("up","Home",FormMethod.Post,new{enctype="multipart/form-data"})) {%>
       <input type="file" name="upfile" />
       <input type ="submit"  name ="upload" value ="上傳" />
       <%} %> 

這裡的 input name必須對應到 Action所接的參數名稱


接者我在HomeController加上一段Action

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult up(HttpPostedFileBase upfile)
{
    //檢查是否有選擇檔案
    if (upfile != null)
    {
        //檢查檔案大小要限制也可以在這裡做
        if (upfile.ContentLength > 0)
        {
            string savedName = Path.Combine(Server.MapPath("~/"), upfile.FileName);
            upfile.SaveAs(savedName);
        }
    }
    return RedirectToAction("Index");
} 

接值的參數名稱為 upfile 對應到 view內的 input name


就這樣最簡單的上傳檔案就完成了...

那下載勒? 下載不需要頁面所以view不需要變動,直接在HomeController加上另一個Action

public ActionResult down()
{
    //我要下載的檔案位置
    string filepath = Server.MapPath("~/123.zip");
    //取得檔案名稱
    string filename = System.IO.Path.GetFileName(filepath);
    //讀成串流
    Stream iStream = new FileStream(filepath, FileMode.Open,FileAccess.Read, FileShare.Read);
    //回傳出檔案
    return File(iStream, "application/zip", filename);
} 

這樣子就你直接輸入 http://你的根目錄/Home/down 就可以下載檔案了,簡單輕鬆又方便。

 

如果你不知道檔案的MimeType的話兩種方法,一種自己查另一種都告訴它你不知道就好啦....

application/unknown 

 

以上範例只是範例,真實的應用當然不可能啥判斷都沒有,請記得自己加上去唷。

http://blog.riaproject.com/tips/44.html(MimeType列表)

回應討論