Upload无刷新上传控件
Upload无刷新上传控件
最近在做一个web开发项目 ,用到upload上传控件 ,由于c#提供的控件局限性太大 ,所以就自己从国外大牛 手里借鉴一下.
该控件可以判断上传的文件是否已存在 ,减少了服务器压力,提供了很好的用户体检.裉据测试此控件可以很好的兼容MVC WebFrom 中.

1 public ActionResult Upload(HttpPostedFileBase Filedata)
2 {
3 // 没有文件上传,直接返回
4 if (Filedata == null || string.IsNullOrEmpty(Filedata.FileName) || Filedata.ContentLength == 0)
5 {
6 return HttpNotFound();
7 }
8
9 //获取文件完整文件名(包含绝对路径)
10 //文件存放路径格式:/files/upload/{日期}/{md5}.{后缀名}
11 //例如:/files/upload/20130913/43CA215D947F8C1F1DDFCED383C4D706.jpg
12 string fileMD5 = GetMD5HashFromStream(Filedata.InputStream);
13 string FileEextension = Path.GetExtension(Filedata.FileName);
14 string uploadDate = DateTime.Now.ToString("yyyyMMdd");
15
16 string imgType = Request["imgType"];
17 string virtualPath = "/";
18 if (imgType == "normal")
19 {
20 virtualPath = string.Format("~/files/upload/{0}/{1}{2}", uploadDate, fileMD5, FileEextension);
21 }
22 else
23 {
24 virtualPath = string.Format("~/files/upload2/{0}/{1}{2}", uploadDate, fileMD5, FileEextension);
25 }
26 string fullFileName = this.Server.MapPath(virtualPath);
27
28 //创建文件夹,保存文件
29 string path = Path.GetDirectoryName(fullFileName);
30 Directory.CreateDirectory(path);
31 if (!System.IO.File.Exists(fullFileName))
32 {
33 Filedata.SaveAs(fullFileName);
34 }
35
36 var data = new { imgtype = imgType, imgpath = virtualPath.Remove(0, 1) };
37 return Json(data, JsonRequestBehavior.AllowGet);
38 }
39
40 private static string GetMD5HashFromStream(Stream stream)
41 {
42 try
43 {
44 System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
45 byte[] retVal = md5.ComputeHash(stream);
46 StringBuilder sb = new StringBuilder();
47 for (int i = 0; i < retVal.Length; i++)
48 {
49 sb.Append(retVal[i].ToString("X2"));
50 }
51 return sb.ToString();
52 }
53 catch (Exception ex)
54 {
55 return string.Empty;
56 }
57 }
58 }

上面的包含的两个方法 ,就是该控件后台实现方法 ,是不是很简单呢 ???
其中
GetMD5HashFromStream()提供对上传文件MD5加密,以此判断服务器中是否存在该文件 下面我来看下在view页面怎么实现的??

1 @{
2 ViewBag.Title = "Index";
3 Layout = "~/Views/Shared/_Layout.cshtml";
4 }
5
6 <link href="~/Uploadify/uploadify.css" rel="stylesheet" type="text/css" />
7 <script src="~/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
8 <script src="~/Uploadify/jquery.uploadify.min.js" type="text/javascript"></script>
9 <h2>Index</h2>
10 <p></p>
11 <p></p>
12 <p></p>
13 <p></p>
14 <img src="" id="uploadimg" />
15
16 <span id="btn_upload"></span>
17 <script type="text/javascript">
18 $(function () {
19 $('#btn_upload').uploadify({
20 uploader: '/Home/Upload', // 服务器处理地址
21 swf: '/Uploadify/uploadify.swf',
22 buttonText: "选择文件", //按钮文字
23 height: 34, //按钮高度
24 width: 82, //按钮宽度
25 fileTypeExts: "*.jpg;*.png;*.exe;", //允许的文件类型
26 fileTypeDesc: "请选择图片文件", //文件说明
27 formData: { "imgType": "normal" }, //提交给服务器端的参数
28 onUploadSuccess: function (file, data, response) { //一个文件上传成功后的响应事件处理
29 var data = $.parseJSON(data);
30 $('#uploadimg').attr('src', data.imgpath);
31 alert(data.imgpath);
32 }
33 });
34 });
35 </script>

是不是很简单呢 ??
其中要在加载两个JS文件 和一个Css样式表.
到此控件配置结束

demo地址:cu.nj02.dl2.baidupcs.com/file/1dc213c64c63615f6df8a44e258febc0?bkt=p2-nj-295&fid=1225720976-250528-218974559079752&time=1418386490&sign=FDTAXERLB-DCb740ccc5511e5e8fedcff06b081203-LcpH9m5sDAEH1ttRRAA7K6FDNzw%3D&to=ncp&fm=Nan,B,U,nc&newver=1&newfm=1&flow_ver=3&sl=81723464&expires=8h&rt=pr&r=532838191&mlogid=2584517802&vuk=1225720976&vbdid=2378542920&fin=UploadFileTest.rar&fn=UploadFileTest.rar
Upload无刷新上传控件的更多相关文章
- 用jQuery File Upload做的上传控件demo,支持同页面多个上传按钮
需求 有这么一个需求,一个form有多个文件要上传,但又不是传统的图片批量上传那种,是类似下图这种需求,一开始是用的swfupload做的上传,但是问题是如果有多个按钮的话,就要写很多重复的代码,于为 ...
- jQuery AJAX 网页无刷新上传示例
新年礼,提供简单.易套用的 jQuery AJAX 上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 ...
- ajax 无刷新上传
最近要做微信的图文上传,因为一个图文了表中可以有多个图文,所有按钮需要随时添加,所以做了一种无刷新上传的方法. 首先我们要在html页面中写上这样的几段代码 javascript: $(functio ...
- jquery文件上传控件 Uploadify
(转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...
- 使用Uploadify(UploadiFive)多文件上传控件遇到的坑
最近项目中需要实现多文件上传功能,于是结合需求最终选择了Uploadify这一款控件来实现.相比其他控件,Uploadify具有简洁的界面,功能API基本可以解决大多数需求,又是基于jquery的,配 ...
- 适应各浏览器图片裁剪无刷新上传jQuery插件(转)
看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...
- jQuery+AJAX实现网页无刷新上传
新年礼,提供简单.易套用的 jQuery AJAX上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 ...
- js实现无刷新上传
在新增数据项的时候,用ajax实现无刷新提交,但上传文件的时候,由于数据类型原因,不能将页面的<asp:FileUpload>中以字符串值的方式传到js里调用.我一共找到了两个方法予以解决 ...
- jquery文件上传控件 Uploadify 可以和ajax交互
http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html 原网址 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同 ...
随机推荐
- mysql1130远程连接没有权限解决方法
原因擅自在两个远程连接,一种是由于mysql限制,一个是防火墙限制. 1,解决防火墙限制: 于mysql服务主机将关闭防火墙,或者在防火墙高级设置这增加了入站和出站规则,加号mysql的port.同意 ...
- Linux内核进程管理
介绍: 在Linux的内核的五大组成模块中,进程管理模块时很重要的一部分.它尽管不像内存管理.虚拟文件系统等模块那样复杂.也不像进程间通信模块那样条理化,但作为五大内核模块之中的一个,进程管理对我们理 ...
- STL 源代码分析 算法 stl_algo.h -- pre_permutation
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie pre_permutation ------------------------------ ...
- Matlab中调用第三方Java代码
搞了一天,才算搞定. 第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: disp(java.lang.System.get ...
- 关于在同一母版页中使用多个CSS文件的解决方案
原文:关于在同一母版页中使用多个CSS文件的解决方案 以前都用.NET1.1没遇到这问题,现在换了2.0开始学着使用母版,结果就遇到了这个问题,在百度上一搜索才发现有不少人提出这个问题,但没找到好的解 ...
- Ohloh研究报告
1.底 由于近期接合ospaf同样是一个开源项目的成熟度分析工具,由于该项目现在Ohloh我们有共同的东西,这么ohloh我们进行了调查. 简单的说,初始ohloh是一个代码搜 ...
- Ubuntu设置交换空间參考教程[图]
假设你当前使用的Ubuntu系统,不管是虚拟机还是实体机,没有交换分区或交换分区空间不足,能够为其设置交换空间. 本文提供的是一种设置交换空间的简单方法. 如若转载,请注明博文地址及原作者(Risin ...
- Redis集群环境安装指南
环境 RHLinux-6.4-64-EN, 红帽6.4 64位,英文正式公布版. Redis3.0.0 redis2.x版本号还不支持集群,3.0版本号将会支持,如今3.0版本号还在开发中,如今是be ...
- Dynamics CRM2013/2015 禁止欢迎屏幕(Disable the Welcome Screen)
首先打开Dynamic CRM 2013将有一个欢迎界面的例子,下面的图,它不会为了图检查框出现.OK然后,下一次打开就没有. 可是当我们打开F12开发者工具,清除域的缓存后再次打开CRM,这个欢迎 ...
- Lampda或Linq中的SqlFunctions.StringConvert()
要使用 Lampda或Linq中的SqlFunctions.StringConvert(), 需要引用命名空间using System.Data.Objects.SqlClient, 该函数可进行模拟 ...