使用Web Uploader实现多文件上传


Posted in Javascript onJune 08, 2016

引入资源

使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF。

<!--引入CSS--> 
<link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css"> 
<!--引入JS--> 
<script type="text/javascript" src="webuploader文件夹/webuploader.js">
</script>
<!--SWF在初始化的时候指定,在后面将展示-->

文件上传

WebUploader只包含文件上传的底层实现,不包括UI部分。所以交互方面可以自由发挥,以下将演示如何去实现一个简单的版本。

请点击下面的选择文件按钮,然后点击开始上传体验此Demo。

Html部分

首先准备dom结构,包含存放文件信息的容器、选择按钮和上传按钮三个部分。

<div id="uploader" class="wu-example"> 
<!--用来存放文件信息-->
<div id="thelist" class="uploader-list">
</div>
<div class="btns">
<div id="picker">选择文件</div>
<button id="ctlBtn" class="btn btn-default">开始上传</button> 
</div> 
</div>

初始化Web Uploader

具体说明,请看一下代码中的注释部分。

var uploader = WebUploader.create({ 
// swf文件路径 swf: BASE_URL + '/js/Uploader.swf', 
// 文件接收服务端。
server: 'http://webuploader.duapp.com/server/fileupload.php', 
// 选择文件的按钮。
可选。 
// 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: '#picker',
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! 
resize: false });

显示用户选择

由于webuploader不处理UI逻辑,所以需要去监听fileQueued事件来实现。

// 当有文件被添加进队列的时候 uploader.on( 'fileQueued', function( file )
{ $list.append( '<div id="' + file.id + '" class="item">' + '<h4 class="info">' + file.name + '</h4>' + '<p class="state">等待上传...</p>' + '</div>' ); });

文件上传进度

文件上传中,Web Uploader会对外派送uploadProgress事件,其中包含文件对象和该文件当前上传进度。

// 文件上传过程中创建进度条实时显示。
uploader.on( 'uploadProgress', function( file, percentage )
{ var $li = $( '#'+file.id ), $percent = $li.find('.progress .progress-bar'); 
// 避免重复创建 if ( !$percent.length ) 
{ $percent = $('<div class="progress progress-striped active">' + '<div class="progress-bar" role="progressbar" style="width: 0%">' + '</div>' + '</div>').appendTo( $li ).find('.progress-bar'); } $li.find('p.state').text('上传中'); $percent.css( 'width', percentage * 100 + '%' ); });

文件成功、失败处理

文件上传失败会派送uploadError事件,成功则派送uploadSuccess事件。不管成功或者失败,在文件上传完后都会触发uploadComplete事件。

uploader.on( 'uploadSuccess', function( file ) 
{ $( '#'+file.id ).find('p.state').text('已上传'); 
}); uploader.on( 'uploadError', function( file )
{ $( '#'+file.id ).find('p.state').text('上传出错'); 
}); uploader.on( 'uploadComplete', function( file )
{ $( '#'+file.id ).find('.progress').fadeOut(); 
});

图片上传

与普通文件上传相比,此demo演示了:文件过滤,图片预览,图片压缩上传等功能。

Html

要实现如上demo,首先需要准备一个按钮,和一个用来存放添加的文件信息列表的容器。

<!--dom结构部分-->
<div id="uploader-demo"> 
<!--用来存放item-->
<div id="fileList" class="uploader-list">
</div> <div id="filePicker">选择图片</div>
</div>

Javascript

创建Web Uploader实例

// 初始化Web Uploader var uploader = WebUploader.create({ // 选完文件后,是否自动上传。
auto: true, // swf文件路径 swf: BASE_URL + '/js/Uploader.swf', // 文件接收服务端。
server: 'http://webuploader.duapp.com/server/fileupload.php', // 选择文件的按钮。
可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: '#filePicker', // 只允许选择图片文件。
accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' } });

监听fileQueued事件,通过uploader.makeThumb来创建图片预览图。

PS: 这里得到的是Data URL数据,IE6、IE7不支持直接预览。可以借助FLASH或者服务端来完成预览。

// 当有文件添加进来的时候 uploader.on( 'fileQueued', function( file )
{ var $li = $( '<div id="' + file.id + '" class="file-item thumbnail">' + '<img>' + '<div class="info">' + file.name + '</div>' + '</div>' ),
$img = $li.find('img'); // $list为容器jQuery实例 $list.append( $li ); // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 
// thumbnailWidth x thumbnailHeight 为 100 x 100 uploader.makeThumb( file, function( error, src ) 
{
if ( error ) 
{ 
$img.replaceWith('<span>不能预览</span>'); return; 
} $img.attr( 'src', src ); }, thumbnailWidth, thumbnailHeight ); });

然后剩下的就是上传状态提示了,当文件上传过程中, 上传成功,上传失败,上传完成都分别对应uploadProgress,uploadSuccess, uploadError, uploadComplete事件。

// 文件上传过程中创建进度条实时显示。 
uploader.on( 'uploadProgress', function( file, percentage )
{ var $li = $( '#'+file.id ), $percent = $li.find('.progress span'); // 避免重复创建 
if ( !$percent.length )
{ $percent = $('<p class="progress"><span></span></p>') .appendTo( $li ) .find('span');
}
$percent.css( 'width', percentage * 100 + '%' ); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 
uploader.on( 'uploadSuccess', function( file )
{ $( '#'+file.id ).addClass('upload-state-done'); }); // 文件上传失败,显示上传出错。
uploader.on( 'uploadError', function( file ) 
{ var $li = $( '#'+file.id ), $error = $li.find('div.error'); // 避免重复创建 if ( !$error.length )
{ $error = $('<div class="error"></div>').appendTo( $li );
} $error.text('上传失败'); }); 
// 完成上传完了,成功或者失败,先删除进度条。
uploader.on( 'uploadComplete', function( file )
{ $( '#'+file.id ).find('.progress').remove(); });

以上所述是小编给大家介绍的使用Web Uploader实现多文件上传的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
爱恋千雪-US-AscII加密解密工具(网页加密)下载
Jun 06 Javascript
location.search在客户端获取Url参数的方法
Jun 08 Javascript
JS定时器实例
Apr 17 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
JS操作Cookies的小例子
Oct 15 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
Bootstrap源码解读导航条(7)
Dec 23 Javascript
用Webpack构建Vue项目的实践
Nov 07 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
May 28 Javascript
jQuery实现飞机大战小游戏
Jul 05 jQuery
如何让vue长列表快速加载
Mar 29 Vue.js
浅析JSONP技术原理及实现
Jun 08 #Javascript
JSONP原理及简单实现
Jun 08 #Javascript
Javascript必知必会(四)js类型转换
Jun 08 #Javascript
JavaScript必知必会(三) String .的方法来自何方
Jun 08 #Javascript
JavaScript必知必会(二) null 和undefined
Jun 08 #Javascript
JavaScript必知必会(九)function 说起 闭包问题
Jun 08 #Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 #Javascript
You might like
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
微信小程序 使用腾讯地图SDK详解及实现步骤
2017/02/28 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
python中的变量如何开辟内存
2018/06/26 Python
python的concat等多种用法详解
2018/11/28 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python如何将多个PDF进行合并
2019/08/13 Python
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
建筑工程专业毕业生自荐信
2013/10/19 职场文书
毕业生求职的求职信
2013/12/05 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
2015双创工作总结
2015/07/24 职场文书