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相结合而成的文件上传插件,其功能非常强大.以前在项目中用过几次,但它的配置参数太多了,用过后就忘记怎么用了,到以后要用时又得到官网上看它的文档,真是太烦了.所以 ...
随机推荐
- sdut 6-2 多态性与虚函数
6-2 多态性与虚函数 nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit1000ms Memory Limit ...
- java连接数据库——JDBC连接数据库
DBUtil.java // 数据库操作文件 package com.bjpowernode.jdbc.util; import java.io.File; import java.io.File ...
- hbase列表排序
hbase都是依照字典序进行排序的,也就是降序,在页面的表现就是最早的数据(rowkey最小的)排在前面. 眼下的解决方式是:给主键添加一个外键关联表.外键的生成规则是 400000000000-主键 ...
- CentOS7+Tomcat 生产系统部署
1 准备OS账户 安全起见,本着最小权限原则,生产系统决不同意使用root账户来执行tomcat.为此,建立新账户tomcat,并设定登录password. useradd tomcat passwd ...
- SharePoint 2010 新列表模板列表
SharePoint 2010 新列表模板列表 项目描述叙事 发展环境创造了良好的名单为模板.然后使用列表模板将其复制到生产环境. 脚步 1. 打开"列表设置",找到"将 ...
- Ubuntu 13.04 用户安装 gnome 3.8 桌面
昨天我试用了一把 Ubuntu gnome 13.04,如果你看了那一片文章:Ubuntu Gnome 13.04 体验截图.对 Ubuntu gnome 13.04 并不是采用的gnome 3.8 ...
- java编程中容易犯2的细节汇总
1.for() 和 while() 执行步骤 for(s1;s2;s3){ s4;} 1.进入循环执行s1; 2.执行s2;//条件为真才执行s4,不然就跳出for了. 3,执行 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (三)
第二部分请点这里 下面首先来实现Bing接口! 实现Bing接口的类取名SimpleBing. 容易发现,SimpleBing类总的来说要向下,但点击一下又得向上,向上到了一定界限又得向下,但我们又只 ...
- char *详细指针
我前段时间写的char*和char[]差额.今char*做一个更深入的了解 1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码 #incl ...
- 微信小程序开发者工具集合包
开发论坛 http://www.henkuai.com/forum-56-1.html 工具包下载 https://yunpan.cn/ckXFpuzAeVi2s 访问密码 b4cc 开发文档 h ...