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 是基于 Yahoo! UI Library (YUI) 的扩展,主要用于构建富客户端的 Web 应用程序。这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 ...
**YUI-EXT使用详解** YUI-EXT是基于Yahoo! User Interface Library (YUI)的一个扩展库,专为构建富互联网应用程序(RIA)而设计。YUI-EXT提供了许多高级组件,如表格、菜单、窗口、表单、布局管理器等,极大地丰富...
《YUI使用文档》汉语版是一份详细的YUI学习材料,它涵盖了这个JavaScript库的核心功能和使用方法。YUI,全称Yahoo! User Interface Library,是Yahoo开发的一个开放源代码的JavaScript库,旨在帮助开发者创建交互式...
在"YUI js方法使用例子"中,我们可以通过以下步骤来体验YUI的强大功能: 1. **引入YUI**:在HTML文件中,通过`<script>`标签引入YUI库,可以选择性地加载所需模块。 ```html <script src="http://yui.yahooapis....
《深入理解YUI3:基于yui3-master.zip的探讨》 YUI(Yahoo! User Interface Library)是由雅虎公司开发的一套开源JavaScript库,它为Web开发者提供了丰富的功能和工具,以创建交互性强、性能优秀的网页应用。YUI3是...
四、YUI的使用与学习 学习YUI,首先需要掌握JavaScript基础知识,然后通过官方文档了解YUI的模块化结构和API。官方文档详细且全面,包含了大量的示例代码,便于开发者快速上手。同时,社区资源丰富,有许多优秀的...
此外,YUI的延迟加载(LazyLoad)特性,能让非核心模块在需要时才加载,进一步优化资源使用。 总结,YUI 3.9.0 r2是一个强大的前端开发框架,它提供了一整套工具和组件,以应对复杂的界面设计挑战,并通过优化资源...
例如,例子中可能用到了“yui-button”来创建交互式的按钮,或者使用“yui-menu”构建导航菜单,这些组件大大简化了开发工作,提升了用户体验。 在实际开发中,YUI的调试工具也非常实用。YUI Logger可以帮助开发者...
--charset <charset> 指定读取输入文件使用的编码 --line-break <column> 在指定的列后插入一个 line-bread 符号 -v, --verbose 显示info和warn级别的信息 -o <file> 指定输出文件。默认输出是控制台。 ...
在使用yuicompressor时,开发者可以通过命令行或者集成到IDE(如IntelliJ IDEA,简称Idea)中来操作。对于Idea用户,可以通过安装第三方插件实现yuicompressor的集成,这样在编译项目时,可以直接对JavaScript和CSS...
1. **YUI库**:了解YUI的基本结构、模块化设计和如何引入到项目中,是使用YUI表单验证器的前提。 2. **表单验证**:表单验证的常见规则包括非空检查、长度限制、格式验证(如邮箱、电话号码等)和自定义验证函数。 3...
首先,`yui 使用文档.docx`可能是YUI的官方文档的中文版,它详细解释了如何引入YUI库,如何使用各个模块,以及如何配置和优化项目。这份文档通常会涵盖以下几个方面: 1. **引入YUI**:讲解如何通过HTML脚本标签将...
利用Yahoo YUI库做的一个TREE实例,很详细的阐述了YUI的使用原理
YUI 库,全称Yahoo! UI Library。是一组工具和控件,用...YUI 基于BSD协议,对所有的使用方式都是免费的。YUI 项目包括YUI 库和两个创建时工具: YUI Compressor (压缩) 和 YUI Doc (JavaScripts代码的文档引擎)。
YUI安装文档.doc 提供了详细的安装和使用指南,包括如何配置环境、运行工具以及解决常见问题的方法。对于初次使用者来说,这份文档是了解和上手YUI打包工具的重要参考资料。 yuicompressor-2.4.7.jar 和 yui...
通过这些示例,你可以学习如何创建事件监听器、如何使用布局组件构建页面结构、如何实现动画效果以及如何与其他服务通信。同时,文档部分详细阐述了每个模块的用法、参数、返回值和注意事项,是学习和调试YUI的宝贵...
1. **版本更新**:确保使用最新版本的YUICompressor,以获得最新的优化算法和修复的已知问题。 2. **备份原始文件**:在压缩前,最好备份原始文件,以防万一压缩过程中出现问题。 3. **测试压缩后的代码**:虽然...
- 使用`YUI.one()`来获取单个DOM节点或使用选择器获取第一个匹配的元素。 - 支持CSS3选择器,但需加载额外的`selector-css3`模块。 - **属性操作**: - 可以通过`set`和`get`方法来操作Node实例的属性。这些方法...
本篇文章将深入探讨如何使用Yahoo的开源工具——YUI Compressor来实现这一目标。 YUI Compressor是由Yahoo开发的一款高效且强大的JavaScript和CSS压缩工具。它能够通过删除空格、注释和不必要的字符,以及进行代码...
使用YUI Compressor非常简单,你可以通过命令行界面或集成到构建系统中。在命令行下,只需指定输入文件和输出文件,YUI Compressor就会自动处理压缩工作。对于开发者而言,它可以轻松集成到如Grunt、Gulp或Webpack等...