前台代码如下

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<title>Index</title>
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script type="text/javascript">
var times = 1;
$("#add").click(function () {
var fileNmae = "FileUpLoad" + n;
$("#divdivfile").append("<input type=\"file\" name=\"" + fileNmae + "\" />");
times++;
});
</script>
</head>
<body>
<div>
@using (Html.BeginForm("UpLoad", "UpdateLoad", FormMethod.Post, new { enctype="multipart/form-data"}))
{
<div id="divfile">
<input type="file" name="FileUpload" />
</div>
<input type="button" id="add" value="增加" />
<input type="submit" id="Submit" value="上传" />
}
</div>
</body>
</html>

首先判断上传的文件是否合法

    public enum FileTypeExtension
{
GIF = ,
PNG = ,
JPG = ,
}
public class FileUploadCommon
{
/// <summary>
/// 主要用于判断上传的特定文件是否附合特定后缀名的限制
/// </summary>
/// <param name="fu">上传的文件对象</param>
/// <param name="fileEx">系统允许上传的文件的类型</param>
/// <returns>true:代表通过验证,false:代表没有通过验证</returns>
public static bool IsAllowedExtension(HttpPostedFileBase fu, FileTypeExtension[] fileEx)
{
int contentLength = fu.ContentLength;
byte[] buffer = new byte[contentLength];
fu.InputStream.Read(buffer, , contentLength);
MemoryStream input = new MemoryStream(buffer);
BinaryReader reader = new BinaryReader(input);
string s = "";
try
{
s = reader.ReadByte().ToString();
s = s + reader.ReadByte().ToString();
}
catch
{
}
reader.Close();
input.Close();
foreach (FileTypeExtension extension in fileEx)
{
if (int.Parse(s) == Convert.ToInt32(extension))
{
return true;
}
}
return false;
} }

后台代码 分为 单个上传和批量上传,注示部份为批量上传

[HttpPost]
[ValidateInput(false)]
public ActionResult UpLoad(FormModel model)
{
FileTypeExtension[] fileTypeArr = { FileTypeExtension.GIF, FileTypeExtension.JPG, FileTypeExtension.PNG };
// 单个上传
try
{
if (Request.Files != null && Request.Files.Count > && Request.Files[].ContentLength > )
{
string fileType = Request.Files[0].FileName.Substring(Request.Files[0].FileName.LastIndexOf(".")); // 获取文件类型
Stream fileStream = Request.Files[].InputStream;
bool fileOk = FileUploadCommon.IsAllowedExtension(Request.Files[], fileTypeArr); // 判断上传的文件是否合法
if (fileOk && Request.Files[].ContentLength / < ) // 判断合法 及 文件大小是否合法
{
string path = Server.MapPath("/Content/FileUpdateLoad/");
string fileName = Path.GetFileNameWithoutExtension(Request.Files[].FileName) + DateTime.Now.ToString("yyyyMMddHHmmss") + fileType;
Request.Files[].SaveAs(Path.Combine(path, fileName));
return RedirectToAction("Index", "UpdateLoad");
}
else
ViewBag.Error = "文件过大或格式不正确";
}
else
ViewBag.Error = "上传文件失败,可能您未选择上传文件";
}
catch (Exception ex)
{
ViewBag.Error = "上传文件失败,原因如下:" + ex.Message;
}
//foreach (string upload in Request.Files) // 如果是批量上传
//{
// if (upload != null && Request.Files[upload].ContentLength > 0)
// {
// string fileType = Request.Files[upload].ContentType; // 获取文件类型
// Stream fileStream = Request.Files[upload].InputStream;
// bool fileOk = FileUploadCommon.IsAllowedExtension(Request.Files[upload], fileTypeArr); // 判断上传的文件是否合法
// if (fileOk && Request.Files[upload].ContentLength / 1024 < 1024) // 判断合法 及 文件大小是否合法
// {
// string path = Server.MapPath("/Content/FileUpdateLoad/");
// string fileName = Path.GetFileNameWithoutExtension(Request.Files[upload].FileName) + DateTime.Now.ToString("yyyyMMddHHmmss") + fileType;
// Request.Files[upload].SaveAs(Path.Combine(path, fileName));
// }
// else
// ViewBag.Error = "文件过大或格式不正确";
// }
// else continue;
//}
return View(model);
}

还可以通过以下方式:

  [HttpPost]
[ValidateInput(false)]
public ActionResult UpdateLoad()
{
FileTypeExtension[] fileTypeArr = { FileTypeExtension.GIF, FileTypeExtension.JPG, FileTypeExtension.PNG };
// 单个上传
try
{
if (Request.Files != null && Request.Files.Count > && Request.Files[].ContentLength > )
{
HttpRequest request = System.Web.HttpContext.Current.Request;
HttpFileCollection FileCollect = request.Files;
if (FileCollect.Count > && FileCollect[].ContentLength>) //如果集合的数量大于0
{
//foreach (string str in FileCollect)
//{
// HttpPostedFile FileSave = FileCollect[str]; //用key获取单个文件对象HttpPostedFile
// string imgName = DateTime.Now.ToString("yyyyMMddhhmmss");
// string imgPath = "/" + imgName + FileSave.FileName; //通过此对象获取文件名
// string AbsolutePath = Server.MapPath(imgPath);
// FileSave.SaveAs(AbsolutePath); //将上传的东西保存
// Response.Write("<img src='" + imgPath + "'/>");
//}
HttpPostedFile FileSave = FileCollect[]; //用key获取单个文件对象HttpPostedFile
string fileName = Path.GetFileName(FileSave.FileName);
string imgName = DateTime.Now.ToString("yyyyMMddhhmmss") + FileSave.FileName;
bool fileOk = FileUploadCommon.IsAllowedExtension(Request.Files[], fileTypeArr); // 判断上传的文件是否合法
if (fileOk && FileSave.ContentLength / < ) // 判断合法 及 文件大小是否合法
{
string AbsolutePath = Server.MapPath("/Content/FileUpdateLoad/" + imgName);
FileSave.SaveAs(AbsolutePath); //将上传的东西保存
//int fileLength = FileSave.ContentLength;
//Byte[] fileByteArr = new Byte[fileLength];
//Stream fileStream = FileSave.InputStream; // 创建文件读取流
//fileStream.Read(fileByteArr, 0, fileLength);
//localhost.WebService1 myService = new localhost.WebService1();
//myService.SaveFile(fileByteArr, fileLength, fileName);
}
}
} }
catch (Exception ex)
{
TempData["UploadError"] = "上传文件失败,原因如下:" + ex.Message;
}
return RedirectToAction("Index");
}

关于配置文件 限制上传文件大小 和上传时间

    <httpRuntime executionTimeout="" maxRequestLength="" useFullyQualifiedRedirectUrl="false"/>
</system.web>

关于MVC 上传文件的更多相关文章

  1. Spring MVC上传文件

    Spring MVC上传文件 1.Web.xml中加入 <servlet> <servlet-name>springmvc</servlet-name> <s ...

  2. MVC上传文件

    ASP.NET MVC上传文件是必段撑握的知识.加强训练才是.以前Insus.NET曾使用第三方MyAjaxForm.js :http://www.cnblogs.com/insus/p/378548 ...

  3. Spring MVC 上传文件

    Spring MVC上传文件需要如下步骤: 1.前台页面,form属性 method设置为post,enctype="multipart/form-data"  input的typ ...

  4. asp.net MVC 上传文件 System.Web.HttpException: 超过了最大请求长度

    APS.NET MVC 上传文件出现  System.Web.HttpException: 超过了最大请求长度 这个问题 原因是 默认最大上传文件大小为4096,而我提交的文件太大了. 解决方案:修改 ...

  5. Spring MVC上传文件原理和resolveLazily说明

    问题:使用Spring MVC上传大文件,发现从页面提交,到进入后台controller,时间很长.怀疑是文件上传完成后,才进入.由于在HTTP首部自定义了“Token”字段用于权限校验,Token的 ...

  6. MVC 上传文件并展示

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    最近在做自学MVC,遇到的问题很多,索性一点点总结 ...

  7. MVC:上传文件

    今天写了一个使用MVC上传的DEMO,很简单不超过10行代码.代码如下(关注重点,所以尽量精简掉其他代码): 项目结构

  8. ASP.NET MVC上传文件----uploadify的使用

    课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件.由于时间的关系,故采用第三方插件:uploadify. upl ...

  9. ASP.NET MVC上传文件

    最近参考网络资料,学习了ASP.NET MVC如何上传文件.最基本的,没有用jQuery等技术. 1.定义Model public class TestModel    {        [Displ ...

  10. 解析Spring MVC上传文件

    新建一个普通的maven工程 在pom.xml文件中引入相应的坐标 <?xml version="1.0" encoding="UTF-8"?> & ...

随机推荐

  1. std::thread(2)

    个线程都有一个唯一的 ID 以识别不同的线程,std:thread 类有一个 get_id() 方法返回对应线程的唯一编号,你可以通过 std::this_thread 来访问当前线程实例,下面的例子 ...

  2. 如何用原生js替换字符串中的某个字符(或字符串)为指定的字符串?

    <html> <head><title>我的第一个 HTML 页面</title></head><script type=" ...

  3. 一些VS2013的使用技巧(转载)

    1. Peek View 可以在不新建TAB的情况下快速查看.编辑一个函数的代码. 用法:在光标移至某个函数下,按下alt+F12. 然后在Peek窗口里可以继续按alt+F12.然后按ctrl+al ...

  4. Spring Cloud Feign 使用OAuth2

    Spring Cloud 微服务架构下,服务间的调用采用的是Feign组件,为了增加服务安全性,server之间互相调用采用OAuth2的client模式.Feign使用http进行服务间的通信,同时 ...

  5. JRebel插件安装配置与破解激活(多方案)详细教程

    JRebel 介绍 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费不少生命啊.目前对于idea热部署最好的解决方案就是安装JRebel插件 ...

  6. node 同异步处理

    同步:序列执行,需等待 异步:非序列执行,无需等待 node同步处理:读取->输出->完毕(队列式执行) node异步处理:读取->完毕(回调输出)(后两步同时进行,谁先到谁先输出) ...

  7. WHICH ONE IS BETTER FOR NEWBIE?

    DROP PROCEDURE IF EXISTS w_array; DELIMITER /w/ )) BEGIN ) DO SET @w = LOCATE(',', w_arr); ); SET @w ...

  8. Spark 源码分析 -- Task

    Task是介于DAGScheduler和TaskScheduler中间的接口 在DAGScheduler, 需要把DAG中的每个stage的每个partitions封装成task 最终把taskset ...

  9. 图解HTTP之HTTPS详解

    背景:随着越来越多的主流网站已经使用了HTTPS,作为服务器端开发者,就必须了解HTTPS的优势与劣势. 在HTTP协议中有可能存在信息窃听或身份伪装等问题,而使用HTTPS通信机制可以有效地防止这些 ...

  10. Android开发:带动画的分享效果

    这几天做了个带动画的分享页面.如今把它分享出来,假设你认为实用,请直接使用,避免反复造轮子 先看下效果图 认为仅仅是看效果图不明显.那么用手机扫描以下的二维码下载安装包: