详解jquery uploadify 上传文件


Posted in Javascript onNovember 09, 2013

网上找了一天,大家都说Uploadify唯一的缺点就是不支持中文按钮,杯具之前,我看了下Uploadify的API,才发现了几个参数没被大家提及的,这正是解决此问题的关键。(以后坚决养成没事就看API的习惯)
    Uploadify有一个参数是 buttonText 这个无论你怎么改都不支持中文,因为插件在js里用了一个转码方法把这个参数的值转过码了,解码的地方在那个swf文件里,看不到代码,所以这条路不行。
    另一个参数,网上很少提到,是 buttonImg( 按钮图片),这时你完全可以用一个图片来替换掉插件自带的那个黑色的flash浏览按钮,只要你自己的图片上是中文,这不就解决了中文按钮问题么?如果只加这一个,你会发现你的按钮图片下面有一片白色区域,其实就是那个flash留下的,白色区域表示鼠标可用范围,这个范围可以用width,height来调整。还有一个参数wmode 它的默认值是opaque,把它改成transparent就行了,也就是把那片白色区域透明化。再用刚才说的方法,把按键点击范围设置成跟你图片一样大就完全OK了。

    Uploadify的用法就不说了,网上文章很多,跟别的jquery插件用法一样,就是几种文件的摆放路径而已。
    以下附上Uploadify部分参数的介绍,要看全部的就去看其API文件了,一般在下载的包里都有。

uploader:uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后弹出打开文件对话框,默认值:uploadify.swf。
script :后台处理程序的相对路径。默认值:uploadify.php
checkScript:用来判断上传选择的文件在服务器是否存在的后台处理程序的相对路径
fileDataName:设置一个名字,在服务器处理程序中根据该名字来取上传文件的数据。默认为Filedata
method :提交方式Post 或Get 默认为Post
scriptAccess:flash脚本文件的访问模式,如果在本地测试设置为always,默认值:sameDomain
folder :上传文件存放的目录。
queueID :文件队列的ID,该ID与存放文件队列的div的ID一致。
queueSizeLimit:当允许多文件生成时,设置选择文件的个数,默认值:999。
multi :设置为true时可以上传多个文件。
auto :设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传。
fileDesc:这个属性值必须设置fileExt属性后才有效,用来设置选择文件对话框中的提示文本,如设置fileDesc为“请选择rar docpdf文件”,打开文件选择框效果如下图:
fileExt :设置可以选择的文件的类型,格式如:'*.doc;*.pdf;*.rar' 。
sizeLimit:上传文件的大小限制。
simUploadLimit:允许同时上传的个数默认值:1 。
buttonText:浏览按钮的文本,默认值:BROWSE 。
buttonImg:浏览按钮的图片的路径。
hideButton:设置为true则隐藏浏览按钮的图片。
rollover:值为true和false,设置为true时当鼠标移到浏览按钮上时有反转效果。
width :设置浏览按钮的宽度,默认值:110。
height :设置浏览按钮的高度,默认值:30。
wmode :设置该项为transparent 可以使浏览按钮的flash背景文件透明,并且flash文件会被置为页面的最高层。默认值:opaque 。
cancelImg:选择文件到文件队列中后的每一个文件上的关闭按钮图标

Uploadify还自带了很多参数及有用的方法和回调函数,都在API里,虽然是全英文的,但很容易看懂,这里就不说了。
以下是我用到的代码,可以参考一下:

<script type="text/javascript">  
$(document).ready(function() {  
$("#uploadify").uploadify({  
'uploader'       :'images/uploadify.swf',  
'script'         :'<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do',  
'cancelImg'      : 'images/cancel.png',  
'folder'         : '/',  
'queueID'        : 'fileQueue',  
'fileDataName'   : 'uploadify',  
'fileDesc'       : '支持格式:xls.',   
'fileExt'        : '*.xls',  
'auto'           :false,  
'multi'          :true,  
'height'         : 20,  
'width'          : 50,  
'simUploadLimit' : 3,  
//'buttonText'     : 'fdsfdsf...',  
'buttonImg'      : 'images/browse.jpg',  
// 'hideButton'     : true,  
// 'rollover'       : true,  
'wmode'          : 'transparent',  
onComplete       : function (event, queueID,fileObj, response, data)  
{   
$('<li></li>').appendTo('.files').text(response);   
},   
onError          : function(event,queueID, fileObj)  
{   
alert("文件:"+ fileObj.name + " 上传失败");   
}   
// onCancel         : function(event,queueID, fileObj)  
// {   
//     alert("取消文件:" +fileObj.name);   
// }   
});
<script type="text/javascript">
$(document).ready(function() {
$("#uploadify").uploadify({
'uploader'       : 'images/uploadify.swf',
'script'         :'<%=request.getContextPath()%>/content/ImportScheduleCommitAction.do',
'cancelImg'      : 'images/cancel.png',
'folder'         : '/',
'queueID'        : 'fileQueue',
'fileDataName'   : 'uploadify',
'fileDesc'       : '支持格式:xls.',
'fileExt'        : '*.xls',
'auto'           : false,
'multi'          : true,
'height'         : 20,
'width'          : 50,
'simUploadLimit' : 3,
//'buttonText'     : 'fdsfdsf...',
'buttonImg'      : 'images/browse.jpg',
// 'hideButton'     : true,
// 'rollover'       : true,
'wmode'          : 'transparent' ,
onComplete       : function (event, queueID,fileObj, response, data)
{
$('<li></li>').appendTo('.files').text(response);
},  www.th7.cn
onError          : function(event,queueID, fileObj)
{
alert("文件:"+ fileObj.name + " 上传失败");
}
// onCancel         : function(event,queueID, fileObj)
// {
//     alert("取消文件:" + fileObj.name);
// }
});

要注意的是,我的script属性值是一个请求路径,我发现在我设置了同时上传多个文件后(比如3),并不是每请求一次去上传3个文件,而仍然是执行3次请求,请求一次上传一个文件。这也没办法,uplodify有那么多回调函数,要是一次处理多个,那回调函数的参数就不知道拿哪个了,因为这些参数都不是数组。
也就是说,无论你设置同时上传几个文件,它都会一个一个去请求并上传,只是表面上感觉好像有多个线程同时在处理上传请求一样,只是表象而已。而且如果你把simUploadLimit设置过大就会经常出错,我设置成5的时候经常会有一两个文件上传失败。
Javascript 相关文章推荐
可缩放Reloaded-一个针对可缩放元素的复用组件
Mar 10 Javascript
FireFox JavaScript全局Event对象
Jun 14 Javascript
jQuery 跨域访问问题解决方法
Dec 02 Javascript
基于Jquery的标签智能验证实现代码
Dec 27 Javascript
JS实现根据出生年月计算年龄
Jan 10 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
JS中Eval解析JSON字符串的一个小问题
Feb 21 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
javascript原型链学习记录之继承实现方式分析
May 01 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
Apr 07 Javascript
深入理解Javascript中的循环优化
Nov 09 #Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 #Javascript
当鼠标移动时出现特效的JQuery代码
Nov 08 #Javascript
window.onresize 多次触发的解决方法
Nov 08 #Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 #Javascript
setTimeout和setInterval的深入理解
Nov 08 #Javascript
如何获取select下拉框的值(option没有及有value属性)
Nov 08 #Javascript
You might like
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
jQuery pjax 应用简单示例
2018/09/20 jQuery
Vue源码解析之数组变异的实现
2018/12/04 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
2019/08/01 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python程序语言快速上手教程
2012/07/18 Python
Python实现简单登录验证
2016/04/13 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python异步编程之协程任务的调度操作实例分析
2020/02/01 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
大学生就业策划书范文
2014/04/04 职场文书
企业人事任命书
2014/06/05 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书