首页 > 代码库 > .Net MVC4 上传大文件,并保存表单

.Net MVC4 上传大文件,并保存表单

1. 前台 cshtml

技术分享
</pre><pre name="code" class="csharp">@model BLL.BLL.Product    @{      ViewBag.Title = "Add";  }    <h2>Add</h2>    <form action="../Product/Add" method="post" enctype="multipart/form-data">  <table>  <tr>  <td>@Html.Label("ProductName:")</td>  <td>@Html.TextBoxFor(m=>m.ProductName)</td>  </tr>    <tr>  <td>@Html.Label("ProductDesc:")</td>  <td>@Html.TextBoxFor(m=>m.ProductDesc)</td>  </tr>    <tr>  <td>@Html.Label("ProductPrice:")</td>  <td>@Html.TextBoxFor(m=>m.ProductPrice)</td>  </tr>    <tr>  <td>@Html.Label("ProductImage:")</td>  <td><input type="file" name="ProductImage"/></td>  </tr>    <tr>  <!--下拉列表框,数据由后台初始化-->  <td>@Html.Label("ProductCategory:")</td>  <td>@Html.DropDownListFor(m=>m.CId, @ViewBag.cList as IEnumerable<SelectListItem>)</td>  </tr>    <tr>  <td><input type="submit" value=http://www.mamicode.com/"submit" /></td></tr>    </table>  </form>  
View Code

 

 2. 后台Controller

技术分享
public ActionResult Add() {          ShoppingDataContext dc = new ShoppingDataContext();        //初始化下拉列表框的数据      var linq = from c in dc.ProductCategories select new { c.CategoryId,c.CategoryName};      List<SelectListItem> cList = new List<SelectListItem>();      foreach(var category in linq){          SelectListItem item = new SelectListItem() { Text=category.CategoryName, Value=http://www.mamicode.com/category.CategoryId};          cList.Add(item);              }      ViewBag.cList = cList;      return View();  }      [HttpPost]  public ActionResult Add(Product p)  {      Stream uploadStream = null;      FileStream fs = null;      try      {          //文件上传,一次上传1M的数据,防止出现大文件无法上传          HttpPostedFileBase postFileBase = Request.Files["ProductImage"];           uploadStream = postFileBase.InputStream;          int bufferLen = 1024;          byte[] buffer = new byte[bufferLen];          int contentLen = 0;                    string fileName = Path.GetFileName(postFileBase.FileName);          string baseUrl = Server.MapPath("/");          string uploadPath = baseUrl + @"Images\Upload\Product\";           fs = new FileStream(uploadPath + fileName, FileMode.Create, FileAccess.ReadWrite);            while ((contentLen = uploadStream.Read(buffer, 0, bufferLen)) != 0)          {              fs.Write(buffer, 0, bufferLen);              fs.Flush();          }              //保存页面数据,上传的文件只保存路径          string productImage = "/Images/Upload/Product/" + fileName;          p.ProductImage = productImage;          p.ProductId = Guid.NewGuid().ToString();          p.CreationDate = DateTime.Now;            ShoppingDataContext dc = new ShoppingDataContext();          dc.Products.InsertOnSubmit(p);          dc.SubmitChanges();      }      catch (Exception ex)      {          ex.StackTrace.ToString();      }      finally {       if(null !=fs){          fs.Close();      }      if (null != uploadStream)      {          uploadStream.Close();      }      }        return RedirectToAction("../Category/ListProducts", new { cId=p.CId});  }  
View Code

 

 3. 修改web.config 中对文件上传大小的限制

在 <system.web></system.web> 直接增加如下:

<httpRuntime maxRequestLength="999999" />  

 

 

 

 原文链接

.Net MVC4 上传大文件,并保存表单