`
dogstar
  • 浏览: 271772 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

YUI uploader 使用笔记

阅读更多
YUI uploader组件,还是实验版本.他是用flash模拟文件选择框,js与flash交互进行多文件上传.
需要Flash Player 9.0.45或者更高版本.
由于flash自己的bug,在firefox下,会把ie的cookies传递到server端,所以.如果应用依赖cookies.有两种办法解决:1.不要依赖;2.通过上传url传递.
以下为demo:
1.引入必须的js文件
<!-- Dependencies --> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/yahoo-dom-event/yahoo-dom-event.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/element/element-beta-min.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/json/json-min.js"></script> 
 
<!-- Source files --> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.5.2/build/uploader/uploader-experimental-min.js"></script>

2.html

<!-- flash容器 -->
<div id="multi:container" style="width:0px;height:0px"></div>
<div id="multi:file">请选择图片...</div>
<button type="button" id="multi:select">浏览...</button>
<button type="button" id="multi:up">上传</button>


3.js代码
<script type="text/javascript">
		(function(){
		var D = YAHOO.util.Dom;
		var E = YAHOO.util.Event;

		//swf的时间戳是为了让其在傲游下可用(傲游貌似会错误的缓存flash文件,具体原因不明).各位看官有其他解决办法,请告知.
		//这里指定的flash在yahooapi domian上.要操作提交数据到你自己的site上,需要自己的site根目录下有crossdomain.xml文件,详情google crossdomain.xml
		YAHOO.widget.Uploader.SWFURL = 'http://yui.yahooapis.com/2.5.2/build/uploader/assets/uploader.swf?t='+ new Date().getTime();
		var uploader = new YAHOO.widget.Uploader('multi:container');
		
		//选择框事件绑定
		E.on('multi:select','click', function(ev){
			uploader.browse(true,[{description:'图片',extensions:'*.jpg;*.png;*.pneg;*.gif'}]);
		});
		
		//上传事件绑定
		E.on('multi:up','click', function(ev){
			// uploader上传函数,具体参数解释详见yui文档
			//uploader.uploadAll('http://www.site.com/upload.htm','POST',{id:12343});
			for(var fileId in uploader.fileList){
				uploader.upload(fileId,'http://www.site.com/upload.htm','POST',{id:12343});
				//从文件上传文件列表中移除掉已经上传成功的图片.还有一个api uploader.clearFileList().根据自己情况选用
				uploader.removeFile(fileId);
			}
		}};

		//uploader提供了很多的回调.都是通过注册监听事件的方式来处理的.常用的有,选择图片时fileSelect,上传图片的过程中uploadProgress,上传完毕uploadCompleteData,上传失败时uploadError等.
		//以下注册几个回调.处理页面逻辑
		uploader.addListener('fileSelect',function(ev){
			//ev为回调参数,每一个回调,回调参数不同.请查看YUI uploader文档
			//根据选中的图片,生成html.其中,ev.fileList是一个json,不是数组,key是文件的唯一性id,表现为file1这种形式.value就是上传的图片对象本身.其具有的属性,有id,name等.其他属性请自行查阅YUI uploader文档.
			if(ev.fileList){
				var _multi = [];
				for(var fileId in ev.fileList){
						_multi.push(['<div id="cont:'+ fileId  +'"><span>',ev.fileList[name].name,'</span>',
        						'<span id="pro:'+ fileId  +'">','<img src="http://hk.l.yimg.com/us.yimg.com/lib/ks/hk/i8_staging/generic_bar.gif" style="width:0;height:21px;">',
        						'<ins>0%</ins>',
        						'</span><a href="#" class="cacle:up" params:id="'+ fileId  +'">X</a></div>'
        						].join(''));			

				}
				//根据选中的图片,dom操作生成html
				var container = D.get('multi:file');
				container.innerHTML = _multi.join(' ');
				//注册删除事件
				E.on(D.getElementsByClassName('cacle:up','a',container), 'click', function(ev){
					 var row = D.get('cont:'+ fileId);
					 var fileId = this.getAttribute('params:id');
       					 if(row && fileId){
						 container.removeChild(row);
						 uploader.removeFile(fileId);
       					}
       					E.stopEvent(ev);
       				},fileId);
			}
		}};

		//上传中
		uploader.addListener('uploadProgress',function(ev){
			if(ev.id){
				var proId = 'pro:'+ev.id;
    				var percent = parseInt((ev.bytesLoaded / ev.bytesTotal) * 100);
    				D.setStyle(D.getFirstChild(proId),'width',percent*0.12+'em');
    				D.getLastChild(proId).innerHTML = percent+'%';
			}
		});

		//上传完毕
		uploader.addListener('uploadCompleteData',function(ev){
			//上传完毕,做一些毁掉处理.类似于ajax的数据填充
			//ev.data 类似于ajax中的ev.responseText
		});

		//上传失败
		uploader.addListener('uploadError',function(ev){
			var cont = D.get('cont:'+ev.id);
			if(cont){
				cont.innerHTML = '<span class="error">上传图片失败</span>';
			}
		});	

	})();

</script>

以上是项目中用到YUI uploader所写代码的精简版本.实际的代码因为业务的要求,非常复杂.其中,注意事项都于上表述.有问题请详细查阅YUI uploader文档.如下:
see aslo: http://developer.yahoo.com/yui/uploader/
  • 描述: 多附件选择框.
  • 大小: 42.1 KB
  • 描述: 选择列表
  • 大小: 8.9 KB
分享到:
评论

相关推荐

    Yui_ext 学习笔记

    Yui_ext 学习笔记 MSN:zhoujianguo_leo@hotmail.com

    YUI js方法使用列子

    YUI 是 jquery 一样网页使用的javascrpit 方法库。

    YUI-EXT使用详解

    YUI-EXT使用详解,免费送给大家

    《YUI使用文档》汉语版的yui学习材料

    YUI的使用文档,汉语版的,个人日记,是别人写的,不是我写的

    YUI 入门教程YUI 入门教程YUI 入门教程

    YUI教程YUI 入门教程YUI 入门教程YUI 入门教程

    yuicompressor-yui compressor

    --charset &lt;charset&gt; 指定读取输入文件使用的编码 --line-break &lt;column&gt; 在指定的列后插入一个 line-bread 符号 -v, --verbose 显示info和warn级别的信息 -o &lt;file&gt; 指定输出文件。默认输出是控制台。 ...

    yui_2.9.0前端UI

    YUI 库,全称Yahoo! UI Library。是一组工具和控件,用...YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两个创建时工具: YUI Compressor (压缩) 和 YUI Doc (JavaScripts代码的文档引擎)。

    yahoo yui 实例教程

    利用Yahoo YUI库做的一个TREE实例,很详细的阐述了YUI的使用原理

    yui3-master.zip

    yui3-master.zip

    yuicompressor,给YUI Compressor添加右键命令

    可惜官网提供的版本都不具备右键功能,每次压缩都要cmd输入一些命令实在是繁琐,本文就介绍如何给YUI Compressor添加右键命令,方便使用。 网上已有一些网友写好的安装包,但对应的版本太低,目前最新最多人使用的...

    YUi文档(中文的哦)

    YUI中文文档 详细介绍YUI的使用,真的是中文,真的是中文。

    高效WEB前端开发之路:YUI3.15

    JavaScript是一种最初由Netscape的LiveScript发展而来的面向对象的Web脚本语言,被ECMA国际定义为国际化标准——ECMAScript。JavaScript具有使用局限性。... 本书适用于YUI工程师,也可以作为教材供高校师生学习使用。

    js 压缩YUI

    雅虎的东西,简单的操作很好用 使用例子:java -jar D:\yuicompressor\yuicompressor\yuicompressor.jar E:\js\all.js -o E:\wap\wap2\js\all-min.js --charset utf-8 当然要装jdk了 不然就玩完了

    从YUI2到YUI3看前端的演变 pdf

    YUI3 引入了粒度更细的模块管理方式,通过异步 HTTP 请求加载模块、然后执行回调来加载和使用模块。现场有很多人提出疑问,大家无非关心的是“效率”二字。个人以为在现阶段,这种方式有一点激进,否能为广大用户所...

    yuitest YUI测试工具

    YUI Test is a complete testing framework for JavaScript and Web applications. You can use the simple JavaScript syntax to write unit tests that can be run in web browsers or on the command line, as ...

    yui_2.6.0r2

    yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2 yui_2.6.0r2

    yui 资源包

    yui 源码下载,3.9.0 r2 包,最新版本

    雅虎 用户接口库YUI

    YUI资料 雅虎 用户接口库 中文说明及如何使用学习 Yui组件分成2类:工具包和控件库 Yui 工具包 Yui 工具包利用DOM脚本来简化浏览器内的开发(in-browser devolvement),使用DHTML和AJAX的特性开发所有的Web程序。...

    使用YUI2.8 实现多个LI拖拽

    这是对YUI拖拽例子的改编,大家可以去访问的博客 http://hi.baidu.com/hjzheng

    从YUI2到YUI3看前端的演变

    从YUI2到YUI3看前端的演变

Global site tag (gtag.js) - Google Analytics