SWFUpload多文件上传 文件数限制 setStats()
使用swfupload仿公平图片上传
SWFUpload它是基于flash与javascript的client文件上传组件。
handlers.js文件
完毕文件入列队(fileQueued) →
完毕选择文件(fileDialogComplete) → 開始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完毕(uploadComplete) →
列队完毕(queueComplete)
如上所看到的。单选文件顺序运行以上回调函数,须要注意的是选择多个文件,fileQueued、queueComplete仅仅会运行一次,而fileDialogComplet...→ uploadComplete每一个文件都运行一次。
參考官方样例完毕基本功能后,仿赶集採用iframe的方式
为了实现缩略图预览 以及删除 和上传图片个数的限制
显示缩略图,生成删除缩略图的button,
thumbImages为父页面显示缩略图的div
src_s为生成的缩略图地址
src_b为原图地址
serverData是图片上传处理页面返回的数据 成功则以 success|缩略图地址|原图地址 这种格式返回
- function uploadSuccess(file, serverData) {
- try {
- var result = serverData.split('|');
- if(result[0] != 'success') {
- var progress = new FileProgress(file, this.customSettings.progressTarget);
- progress.setError();
- progress.setStatus(serverData);
- progress.toggleCancel(false);
- } else {
- var progress = new FileProgress(file, this.customSettings.progressTarget);
- progress.setComplete();
- progress.setStatus("上传完毕");
- progress.toggleCancel(false);
- var img_url_s = result[1];
- var img_url_b = result[2];
- addImage(img_url_s,img_url_b);
- }
- } catch (ex) {
- this.debug(ex);
- }
- }
- function addImage(src_s,src_b) {
- var newDiv = parent.document.createElement("div");
- newDiv.style.margin = "5px";
- newDiv.style.height = "60px";
- newDiv.style.width = "80px";
- newDiv.style.border = "1px solid #7F9DB9";
- newDiv.style.cssFloat = "left";
- newDiv.style.styleFloat = "left";
- newDiv.style.position = "relative";
- var newA = parent.document.createElement("a");
- newA.className = "delete";
- newA.title = "删除";
- newA.href = "javascript::";
- newA.onclick = function(){delDiv(newDiv);};
- var newInput_s = parent.document.createElement("input");
- newInput_s.type = "hidden";
- newInput_s.value = src_s;
- newInput_s.name = "image_s[]";
- newA.appendChild(newInput_s);
- var newInput_b = parent.document.createElement("input");
- newInput_b.type = "hidden";
- newInput_b.value = src_b;
- newInput_b.name = "image_b[]";
- newA.appendChild(newInput_b);
- var newImgDiv = parent.document.createElement("div");
- var newImg = parent.document.createElement("img");
- newImg.style.height = "60px";
- newImg.style.width = "80px";
- newImgDiv.appendChild(newImg);
- newDiv.appendChild(newImgDiv);
- newDiv.appendChild(newA);
- parent.document.getElementById("thumbImages").appendChild(newDiv);
- if (newImg.filters) {
- try {
- newImg.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 0;
- } catch (e) {
- // If it is not set initially, the browser will throw an error. This will set it if it is not set yet.
- newImg.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + 0 + ')';
- }
- } else {
- newImg.style.opacity = 0;
- }
- newImg.onload = function () {
- fadeIn(newImg, 0);
- };
- newImg.src = src_s;
- }
- function fadeIn(element, opacity) {
- var reduceOpacityBy = 5;
- var rate = 30; // 15 fps
- if (opacity < 100) {
- opacity += reduceOpacityBy;
- if (opacity > 100) {
- opacity = 100;
- }
- if (element.filters) {
- try {
- element.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
- } catch (e) {
- // If it is not set initially, the browser will throw an error. This will set it if it is not set yet.
- element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
- }
- } else {
- element.style.opacity = opacity / 100;
- }
- }
- if (opacity < 100) {
- setTimeout(function () {
- fadeIn(element, opacity);
- }, rate);
- }
- }
关于剩余可上传文件个数的处理
- function queueComplete(numFilesUploaded) {
- this.setButtonDisabled(false);
- var stats = this.getStats();
- var status = document.getElementById("divStatus");
- status.innerHTML = "已上传 " + stats.successful_uploads + " 个文件,还能够上传"+ parseInt(this.settings['file_upload_limit']-stats.successful_uploads) +"个文件";
- }
- function delDiv(mydiv) {
- mydiv.parentNode.removeChild(mydiv);
- //swfu參见iframe页面中的 swfu = new SWFUpload(settings);
- var stats = swfu.getStats();
- stats.successful_uploads--;
- swfu.setStats(stats);
- var status = document.getElementById("divStatus");
- status.innerHTML = "已上传 " + stats.successful_uploads + " 个文件,还能够上传"+ parseInt(swfu.settings['file_upload_limit']-stats.successful_uploads) +"个文件";
- }
可能是因为使用iframe的关系
delDiv函数里的swfu不能用this取代
总体效果例如以下图:

当上传完图片后。再次改动信息时,须要取已经上传了多少个图片,结合到swfupload里
通过php从后台取到已上传的图片路径。通过smarty给到一个js数组里
- var img_arr = new Array();
- {if isset($img_arr)}
- {section name='img_arr' loop=$img_arr}
- img_arr[{$smarty.section.img_arr.index}] = new Array('{$img_arr[img_arr].images_s}','{$img_arr[img_arr].images_b}');
- {/section}
- {/if}
查询swfupload文档得到例如以下资料
flashReady()
该事件函数是内部事件。因此不能被重写。
当SWFupload实例化,载入的FLASH完毕全部初始化操作时触发此事件。
提醒:相应设置中的自己定义事件swfupload_loaded_handler
于是通过swfupload的settings里设置 swfupload_loaded_handler
- swfupload_loaded_handler : loaded,
再在handlers.js定义loaded函数
- function loaded() {
- if(img_arr.length != 0) {
- for( val in img_arr ) {
- addImageFromDb(img_arr[val][0],img_arr[val][1],this);
- }
- }
- }
调用addImageFromDb函数 改动已上传的图片数量 而且生成已上传的图片的缩略图
- //初始化已经上传过的图片
- function addImageFromDb(src_s,src_b,swfu) {
- var stats = swfu.getStats();
- stats.successful_uploads++;
- swfu.setStats(stats);
- var status = document.getElementById("divStatus");
- status.innerHTML = "已上传<font color='green'>" + stats.successful_uploads + "</font>张,还能够上传<font color='red'>"+ parseInt(swfu.settings['file_upload_limit']-stats.successful_uploads) +"</font>张";
- addImage(src_s,src_b);
- }
參考博客:http://blog.csdn.net/keyunq/article/details/7191590
參考文档:http://leeon.me/upload/other/swfupload.html
http://hi.baidu.com/e_polo/blog/item/232745182e3dbbb84aedbcf7.html
http://addcn.blogbus.com/logs/157496180.html
版权声明:本文博客原创文章。博客,未经同意,不得转载。
SWFUpload多文件上传 文件数限制 setStats()的更多相关文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
系列目录 文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项目上文件上传是比不可少的,大家 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器 ...
- swfupload多文件上传[附源码]
swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项 ...
- SWFUpload多文件上传使用指南
SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了.所以 ...
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题 swfUpload多文件上传
Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题(转) 我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的.通过使用某些技术手段,比如jqu ...
- ctfhub技能树—文件上传—文件头检查
打开靶机 尝试上传一个php文件 抓包修改 放包 制作图片马 上传图片马,并修改文件类型为png 测试连接 查找flag 成功拿到flag
- 文件上传利器SWFUpload使用指南(转)
http://www.cnblogs.com/2050/archive/2012/08/29/2662932.html 文件上传利器SWFUpload使用指南 SWFUpload是一个flash和js ...
- SWFUpload文件上传详解
SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大. SWFUpload的特点: 1.用flash进行上传,页面无刷新,且可自定义Flash按钮的样式; 2.可以在浏览器 ...
- SwfUpload文件上传
SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了.所以 ...
随机推荐
- JAVA 根据经纬度算出附近的正方形的四个角的经纬度
/** * * @param longitude 经度 * @param latitude 纬度 * @param distance 范围(米) * @return */ public static ...
- 《Linux设备驱动开发具体解释(第3版)》进展同步更新
本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTE ...
- Android使用应用程序资源(、颜色数组、尺寸、弦、布尔、整型)
一.Android资源分类详细解释 1.Android资源类别 Android中的资源分为两大类 : 可直接訪问的资源, 无法直接訪问的原生资源; -- 直接訪问资源 : 这些资源能够使用 R. ...
- SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF
原文:SQL SERVER FOR 多列字符串连接 XML PATH 及 STUFF 本来用 Writer 写一篇关于一列多行合并的博客来的,结果快写完了时候,在一个插入代码时候,崩了,重新打开,居然 ...
- linux查看某个进程CPU消耗较高的具体线程或程序的方法
目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号: 通过进程号pid,我们在linux上可以通过top –H –p <pid> ...
- Windows Phone开发(39):漫谈关键帧动画上篇
原文:Windows Phone开发(39):漫谈关键帧动画上篇 尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅 ...
- android LinearLayout等view如何获取button效果
我们可以给LinearLayout以及一切继承自View的控件,设置View.onClickListener监听,例如LInearLayout. 但是我们发现LinearLayout可以执行监听方法体 ...
- uva 11427 - Expect the Expected(概率)
题目链接:uva 11427 - Expect the Expected 题目大意:你每天晚上都会玩纸牌,每天固定最多玩n盘,每盘胜利的概率为p,你是一个固执的人,每天一定要保证胜局的比例大于p才会结 ...
- 怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 25.99 ...
- AutoFac使用方法总结:Part III
生命周期 AutoFac中的生命周期概念非常重要,AutoFac也提供了强大的生命周期管理的能力. AutoFac定义了三种生命周期: Per Dependency Single Instance P ...