2013-08-16 88 views
1

我想上傳文件添加到我的asp.net mvc4,但是,因爲我剛學C#我不知道如何在何處添加它:文件上傳與MVC應用程序

這是控制器:

public ActionResult Create() 
     { 
      ViewBag.c_id = new SelectList(db.Cities.OrderBy(o => o.name), "c_id", "name"); 
      ViewBag.m_id = new SelectList(db.Schools, "m_id", "name"); 

      return View(); 
     } 

     // 
     // POST: /Create 

     [HttpPost] 
     public ActionResult Create(TotalReport treport) 
     { 
      if (ModelState.IsValid) 
      { 
       treport.created = DateTime.Now; 

       db.TotalReports.Add(treport); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.c_id = new SelectList(db.Cities.OrderBy(o => o.name), "c_id", "name"); 
      ViewBag.m_id = new SelectList(db.Schools, "m_id", "name"); 

      return View(treport); 
     } 

的觀點是在這裏:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
<div class="mycss"> 
     <input type="file" name="file" /> 
    </div> 
</fieldset> 

確定這裏是保存該文件的一部分:

if (file != null && file.ContentLength > 0) 
      { 
       // extract only the fielname 
       var fileName = System.IO.Path.GetFileName(file.FileName); 
       // store the file inside ~/App_Data/uploads folder 
       var path = System.IO.Path.Combine(Server.MapPath("~/myfolder"), fileName); 
       file.SaveAs(path); 
      } 

回答

0

假設您的標記是否喜歡,

<input type="file" name="file" /> 

,然後你的行動應該是什麼樣子,

[HttpPost] 
    public ActionResult(HttpPostedFileBase file) 
    { 
    string filename=file.FileName; 
    filename=DateTime.Now.ToString("YYYY_MM_dddd_hh_mm_ss")+filename; 
    file.SaveAs("your path"+filename); 
return View(); 
    } 

這裏HttpPostedFileBase的參數名稱和上傳控件的名稱應該是相同的。希望這可以幫助

+0

我能夠上傳文件和所有,但是,它不會被保存! – NULL

+0

您是否將文件數據導入文件參數?並檢查路徑是否存在。 –

+0

是的文件進入參數,和所有。然而,當我檢查文件夾時,它不在那裏。我在Windows 7上。 – NULL

0

拿起文件在控制器像這樣

[HttpPost] 
     public ActionResult Create(HttpPostedFileBase fileUpload) 
     { 
      if (ModelState.IsValid) 
      { 
       treport.created = DateTime.Now; 

       db.TotalReports.Add(treport); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.c_id = new SelectList(db.Cities.OrderBy(o => o.name), "c_id", "name"); 
      ViewBag.m_id = new SelectList(db.Schools, "m_id", "name"); 

      return View(treport); 
     } 
+0

我現有的聲明如何:「TotalReport treport」它到底在哪裏? – NULL

+0

所以我做了,但是,文件沒有上傳:(沒有錯誤,但當我檢查文件夾是空白的。忘記這是在localhost上完成的,所以你認爲這是爲什麼?localhost是我的本地PC,不生產 – NULL

+0

對不起,你可以添加你的模型作爲parem以及 – DavidB

0

只是爲了發佈文件添加參數到你的動作:

public ActionResult Create(TotalReport treport, System.Web.HttpPostedFileBase file) 

,做任何你想用它做的 - 讀流,保存到某個地方......

+1

確定它!這也幫助:http://stackoverflow.com/questions/5193842/file-upload-asp-net-mvc -3-0 – NULL

+0

我試圖做到這一點:var fileName = Path.GetFileName(file.FileName);但在我的代碼中,它說「路徑不存在於當前內容中」,我如何包含它:system.path ? – NULL

+0

所以我做了,但是,文件沒有得到上傳:(有沒有錯誤,但當我檢查文件夾它是空白。忘記這是在localhost上完成的,所以你認爲這是爲什麼?localhost是我的本地PC不生產 – NULL