简而言之,直接用代码展示如何实现文件的上传,这里需要使用到一个bootstrap的文件上传插件File Input(请自行下载)。

前台页面:

<!---->
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="css/bootstrap.min.css" />
<link rel="stylesheet" href="css/default.css" />
<link rel="stylesheet" href="css/fileinput.css" /> </head>
<body>
<div class="form-group add-pic-box">
<h2 class="add-pic-head">添加图片</h2>
<input id="upload-file" type="file" multiple class="file" data-min-file-count="1">
</div>
<script type="text/javascript" src="js/jquery-2.1.1.min.js" ></script>
<script type="text/javascript" src="js/bootstrap.min.js" ></script>
<script type="text/javascript" src="js/fileinput.js" ></script>
<script type="text/javascript" src="js/fileinput_locale_zh.js" ></script>
<script type="text/javascript">
//当然这里参数没有介绍完,可以更具需求参考其使用文档
$("#upload-file").fileinput({
uploadUrl: '/User/AddPicture', //这是要将文件上传到哪里的url
uploadAsync: false,//是否进行文件异步上传
maxFileSize: 10485760,//字节,fileinput.js默认是按照1000个字节为1kb来计算的,这个自己可以修改为1024
minFileCount: 1,//最少上传文件数量
maxFileCount: 1,//最大上传文件数量
allowedFileExtensions: ['jpg', 'png', 'gif'],//上传文件限制的类型
uploadExtraData: function () {
//这里是附加数据 description 对应于后台Action中的参数名称
return { description: "这是一个描述" };//可以更加需求获取一个动态的值
},
ajaxSettings: {
//这里是重写文件上传成功后,前台处理后台返回json数据
success: function(data)
{
alert(data.title, data.massage);
}
}
});
</script>
</body>
</html>

要使用File Input插件上传文件主要要引入了fileinput.css、fileinput.js以及fileinput_locale_zh.js(中文化)三个文件,其它的都是bootstrap的一些样式(当然要使用jquery,就应当引人jquery-2.1.1.min.js或其它版本)。

后台处理代码:

//添加图片
[HttpPost]
public ActionResult AddPicture(string description)
{
var result = new JsonResult();
//result.JsonRequestBehavior = JsonRequestBehavior.DenyGet; if (string.IsNullOrWhiteSpace(description))
{
description = "暂无";
}
description = description.Trim();
if (Request.Files.Count == )
{
return Json(new { title = "上传失败", massage = "上传图片不能为空!" }); }
HttpPostedFileBase newPicture = Request.Files[];
if (description.Length > || newPicture == null)
{
return Json(new { title = "上传失败", massage = "图片简介长度不合要求!" }); }
int id = Convert.ToInt32(User.Identity.Name);
string fileExt = "", fileName = "", path = Server.MapPath("~/Resources/LocalPic");
if (newPicture.ContentLength <= )
{
Picture picture = new Picture();
picture.UserId = id;
picture.Name = newPicture.FileName.Split('\\').Last();
picture.CreateTime = DateTime.Now;
picture.IsForbidden = false;
picture.IsShareOut = false;
picture.Description = description;
if (picture.Name.IndexOf('.') > -)
{
fileExt = picture.Name.Substring(picture.Name.LastIndexOf('.')).ToLower();
}
switch (fileExt)
{
case ".jpg":
case ".png":
case ".gif":
break;
default:
return Json(new { title = "上传失败", massage = "图片后缀名不合要求!" });
}
fileName = DateTime.Now.ToFileTime() + Guid.NewGuid().ToString("N") + fileExt;
picture.FilePath = fileName; newPicture.SaveAs(path + @"\" + fileName);//从客户端保存文件到本地
entity.Pictures.Add(picture);
entity.SaveChanges();
return Json(new { title = "上传成功", massage = "成功上传图片!" }); }
else
{
return Json(new { title = "上传失败", massage = "图片大小不合要求!" });
} }

上面代码给出的是上传一张图片的的实例,若是想上传多个文件,只需更改文件后缀限制、改变maxFileCount的值以及后台处理作相应的改变,若是想采用异步上传,只需将前台代码中的uploadAsync的值改为true就可以(默认也是true)。其它的一些功能实现留给读者自己去探索和实现吧!^_^

下一节中我们将要谈到图片的截图上传。

<我的博客主页>:http://www.cnblogs.com/forcheng/

ASP.NET MVC 网站开发总结(二)——一个或多个文件的异步或同步上传的更多相关文章

  1. ASP.NET MVC 网站开发总结(一)

    历经一个多月的努力,工作室的门户网站(http://www.wingstudio.org)终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大 ...

  2. ASP.NET MVC5 网站开发实践(二) Member区域 - 咨询管理的架构

    咨询.留言.投诉等功能是网站应具备的基本功能,可以加强管理员与用户的交流,在上次完成文章部分后,这次开始做Member区域的咨询功能(留言.投诉都是咨询).咨询跟文章非常相似,而且内容更少.更简单. ...

  3. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

  5. ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询

    上次把咨询的架构搭好了,现在分两次来完成咨询:1.用户部分,2管理部分.这次实现用户部分,包含两个功能,查看我的咨询和进行咨询. 目录: ASP.NET MVC5 网站开发实践 - 概述 ASP.NE ...

  6. ASP.NET MVC5 网站开发实践(二) Member区域 - 修改及删除文章

    上次做了显示文章列表,再实现修改和删除文章这部分内容就结束了,这次内容比较简单,由于做过了添加文章,修改文章非常类似,就是多了一个TryUpdateModel部分更新模型数据.   目录: ASP.N ...

  7. ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表

    显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据   目录 ASP.N ...

  8. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(3)修改资料、修改密码

    在上一篇博客中实现了用户的注销和登录,其实代码里落了点东西,就是用户登录要更新最后一次登录时间和登录IP,这次补上.今天做修改资料和修改密码,TryUpdateModel是新用到的东西. 目录: AS ...

  9. ASP.NET MVC 网站开发总结(三) ——图片截图上传

    本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...

随机推荐

  1. Web语义化

    在昨天和做SEO的同学聊了一会儿,当然我没有学会搜索引擎优化的技巧和知识,但在此之前一直对HTML5中header.footer.sidebar.article等标签嗤之以鼻,觉得这个和div没有什么 ...

  2. webservice 之 WSDL的解析

    先看一个wsdl, <?xml version="1.0" encoding="UTF-8" standalone="no"?> ...

  3. 为什么Java方法里面不能再嵌套方法?

    直接原因: 这是Java基本语法定义的,方法中不可以再次声明方法,只能调用其他的方法. 个人理解: 1.方法栈是需要一个载体的,这个载体就是Class,如果一个方法的上一级不是一个类,就说明没有载体. ...

  4. Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

  5. Excel学习笔记

    ---恢复内容开始--- -----------随学随记----------- 获取当前日期: 获取当前系统时间,包含年月日时分秒: =NOW() 获取当前系统时间,包含年月日: =TODAY() 只 ...

  6. Linq 查询结果 可能遵循 2 º,2¹,2 ²,......增长计算

    static void Main(string[] args) { , , , , , , , , }; var obj = from item in array orderby item ascen ...

  7. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  8. OpenCascade BRep Format Description (2)

    OpenCascade BRep Format Description eryar@163.com 摘要Abstract:本文结合OpenCascade的BRep格式描述文档和源程序,对BRep格式进 ...

  9. poj 3321 Apple Trie

    /* poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题! 可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目 ...

  10. Oracle闪回技术(Flashback)

    闪回技术有闪回表.闪回删除.闪回查询.闪回事务查询.闪回事务.闪回数据库.闪回数据归档.其中,闪回查询.闪回事务查询用来“观察”过去:闪回数据归档并不是一个独立的功能,其功能是扩展闪回查询的时间窗口: ...