.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="submit" /></td></tr>  

</table>
</form>  

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=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});
}  

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

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

<httpRuntime maxRequestLength="999999" />  

原文链接

时间: 03-15

.Net MVC4 上传大文件,并保存表单的相关文章

uploadify上传大文件

引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章: [Asp.net]Uploadify所有配置说明,常见bug问题分析 . 大文件上传 第一步:修改uploadify参数 1 'fileSizeLimit': '0',//单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值 2 'fileTypeDesc': '文件',//文件描述Image Files 3

WCF利用Stream上传大文件

WCF利用Stream上传大文件 转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法.系统配置都有了 本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问题.主要是存档方便以后遇到该问题是来查阅.贴出部分代码,如果有疑惑或需要完整代码的请留言 WebForm1.aspx.cs protected void Button1_Click(object sender, EventArgs e) {             FileData file = n

运用php上传大文件配置方法

网站建设:运用php上传大文件配置方法如下: 翻开php.ini, 1.第一找出 file uploads区域,有影响文件上传的以下几个参数: file_uploads = on ;能否准许经过http上传文件的开关.默许为on即是开 upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,假设没指定就会用系统默许的临时文件夹 upload_max_filesize = 8m ;望文生意,即准许上传文件大小的最大值.默许为2m 2.在resource limits区域,还有参数 ;

IIS上传大文件

IIS7.0上传文件限制的解决方法 在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.指定 ASP 请求的实体主体中允许大小为 200,000 (IIS6为204,800) 个字节,在 iis 6.0 之前的版本中,例如:Windows XP(IIS 5.1),没有限制. 这就造成了文件上传不能超过200k,而事实上是提交数据不能超过200k,你可以

PHP上传遇到的问题-php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项

今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了,连普通的字段都获取不到了,苦思冥想还没解决,最后问了师傅,师傅看了说挺奇怪的,然后问我upload_max_filesize的值改了吗,我说改了啊,师傅也解决不了了.过了一会师傅问post_max_size改了吗,我说那个和上传没关系吧,师傅没理我,我还是照着自己的想法继续测试,弄了半天还是不行,最后试了师傅提的意见,成功了,原来上传是和post_max_size有关系的. 总结:php.ini配置文件中的默

php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项

php 上传大文件主要涉及配置 upload_max_filesize 和post_max_size两个选项 今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了,连普通的字段都获取不到了,苦思冥想还没解决,最后问了师傅, 师傅看了说挺奇怪的,然后问我 upload_max_filesize的值改了吗,我说改了啊,师傅也解决不了了.过了一会师傅问 post_max_size改了吗,我说那个和上传没关系吧, 师傅没理我,我还是照着自己的想法继续测试,弄了半天还是不

netty4 实现一个断点上传大文件功能

我本来以为文件断点续传功能很简单,不就是提供2个方法: 一个返回已经上传的文件的长度:另外一个负责上传文件呗(请求带上content-range 指明本次上传的内容在整个文件中的位置),然后根据请求提供的位置写呗,太简单了. 但是实际情况还是比较复杂的,关键问题是,上面的描述现在想想只能称作为文件分段上传,而不是断点续传. 断点意味着网络会断,然后断了之后,服务端根本获取不到本次上传的内容,于是下次又只能从头开始传文件.一种解决办法是客户端将文件分成很小的片段(单个片段丢了就整个片段重传),这个

用百度webuploader分片上传大文件

一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传,如果文件比较大的话,即便是客户端显示文件已经上传了100%,还是会有一个比较长时间的等待,而且当前页面对服务器的请求也会被阻塞. 正常情况下,一般都是在长传完成后,在服务器直接保存. 1 public void ProcessRequest(HttpContext context) 2 { 3 co

WebUploader插件上传大文件单文件和多文件JAVA版使用总结

一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构Spring+struts2+mybatis+mysql 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的