简而言之,直接用代码展示如何实现文件的上传,这里需要使用到一个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. buildbot入门系列—介绍篇

    一.介绍 1. buildbot是一个开源的基于python的持续集成系统,它能够以下三种方式触发相应的自动构建和测试运行,从而迅速的发现问题所在,同时指出造成这个错误的开发人员,当然我们还可以通过页 ...

  2. 厚积薄发,拥抱 .NET 2016

    厚积薄发这个词是高三英语老师在高考前写在黑板上,高中三年努力这么久,是时候迎面而上,冲刺向前.所以,一想到.NET 2016,脑海里蹦出的第一个词就是它. .NET 2016 是 .NET 一次质的飞 ...

  3. 【OpenGL(SharpGL)】支持任意相机可平移缩放的轨迹球实现

    [OpenGL(SharpGL)]支持任意相机可平移缩放的轨迹球 (本文PDF版在这里.) 在3D程序中,轨迹球(ArcBall)可以让你只用鼠标来控制模型(旋转),便于观察.在这里(http://w ...

  4. ECMAScript5 Object的新属性方法

    虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...

  5. HTML按钮实现!!!文件上传,遮罩层

    按钮上传文件: <input type="file" /> file的意思为提交 每个游览器的显示方式都不一样哦 遮罩层:   设两个id <style type ...

  6. 多线程 ThreadPool线程池

    简单说明一下: 线程池可以看做容纳线程的容器:一个应用程序最多只能有一个线程池:ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相 ...

  7. QTP11的下载地址和破解教程

    qtp11 下载地址 http://pan.baidu.com/s/1rE3l6 qtp10的破解 下载注册机http://ishare.iask.sina.com.cn/f/20991520.htm ...

  8. Nexus3.0私服搭建

    官方文档:http://books.sonatype.com/nexus-book/3.0/reference/install.html 1.下载 http://www.sonatype.com/do ...

  9. .NET程序集强命名删除与再签名技术 源代码剖析

    如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径 1  反编译为IL代码,删除签名部分,再编译为程序集 2  应用Re-Sign程序,直接对一个程序集再签名 生成和读取 ...

  10. Java多线程系列--“JUC集合”03之 CopyOnWriteArraySet

    概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyOnWriteArraySet进行基本介绍,然后再说明它的原理,接着通过代码去分析,最后通过示例更进一步的了解 ...