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相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了.所以 ...
随机推荐
- jquery下php与ajax的互传数据(json格式)自我总结
研究了一整天的json数据与ajax的数据传输,现在进行一个小的自我总结,仅供参考 1.关于ajax的认识 $.ajax(),是jquery下包装好的一个函数:参考地址:http://www.w3sc ...
- maven中的java库
/* * * <dependency> <groupId>io.netty</groupId> <artifactId>n ...
- python手记(52)
python将信息加密进图片 从图片中解密信息 >>> runfile(r'K:\testpro\test1.py', wdir=r'K:\testpro') http://blog ...
- POJ3190 Stall Reservations 【贪婪】
Stall Reservations Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3106 Accepted: 111 ...
- Ajax—初识
看DRP的过程.又一次学习了一遍Ajax.更深刻的体会到了Ajax所具有的魅力.Ajax是一种技术或者方法,更是一 种艺术.它让我们的程序以一种更完美的姿态呈如今用户面前.以下就让我们一起走进Ajax ...
- 存读Blob Oracle
- hihocoder第42周 k*N骨牌覆盖(状态dp+矩阵快速幂)
上周的3*N的骨牌,因为状态只有8中,所以我们可以手算出状态转移的矩阵 但是这周是k*N,状态矩阵不好手算,都是我们改成用程序自动生成一个状态转移的矩阵就行了,然后用这个矩阵进行快速幂即可 枚举枚举上 ...
- 初识google多语言通信框架gRPC系列(四)C++中使用gRPC
我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...
- 【Android 应用程序开发】 Fragment 详细说明
笔者 : 汉书亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragmen ...
- [置顶] ios 一个不错的图片浏览分享框架demo
demo功能:一个不错的图片浏览分享框架demo.iphone6.1 测试通过.可以浏览图片,保存,微博分享到新浪,腾讯,网易,人人等. 注:(由于各个微博的接口有时候会有调整,不一定能分享成功.只看 ...