tnblog
首页
视频
资源
登录

Web Uploader文件上传组件文档,文件分段上传,进度条显示

4931人阅读 2021/12/8 9:20 总访问:832750 评论:0 收藏:0 手机
分类: 前端


引入资源

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

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


文件上传

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


Html部分

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

  1. <div id="uploader" class="wu-example">
  2.     <!--用来存放文件信息-->
  3.     <div id="thelist" class="uploader-list"></div>
  4.     <div class="btns">
  5.         <div id="picker">选择文件</div>
  6.         <button id="ctlBtn" class="btn btn-default">开始上传</button>
  7.     </div>
  8. </div>


初始化Web Uploader

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

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

显示用户选择

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

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

文件上传进度

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

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

文件成功、失败处理

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

  1. uploader.on( 'uploadSuccess'function( file {
  2.     $( '#'+file.id ).find('p.state').text('已上传');
  3. });
  4. uploader.on( 'uploadError'function( file {
  5.     $( '#'+file.id ).find('p.state').text('上传出错');
  6. });
  7. uploader.on( 'uploadComplete'function( file {
  8.     $( '#'+file.id ).find('.progress').fadeOut();
  9. });

图片上传

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

Html

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

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

Javascript

创建Web Uploader实例

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

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

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

  1. // 当有文件添加进来的时候
  2. uploader.on( 'fileQueued'function( file {
  3.     var $li = $(
  4.             '<div id="' + file.id + '" class="file-item thumbnail">' +
  5.                 '<img>' +
  6.                 '<div class="info">' + file.name + '</div>' +
  7.             '</div>'
  8.             ),
  9.         $img = $li.find('img');
  10.     // $list为容器jQuery实例
  11.     $list.append( $li );
  12.     // 创建缩略图
  13.     // 如果为非图片文件,可以不用调用此方法。
  14.     // thumbnailWidth x thumbnailHeight 为 100 x 100
  15.     uploader.makeThumb( file, function( error, src {
  16.         if ( error ) {
  17.             $img.replaceWith('<span>不能预览</span>');
  18.             return;
  19.         }
  20.         $img.attr( 'src', src );
  21.     }, thumbnailWidth, thumbnailHeight );
  22. });

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

  1. // 文件上传过程中创建进度条实时显示。
  2. uploader.on( 'uploadProgress'function( file, percentage {
  3.     var $li = $( '#'+file.id ),
  4.         $percent = $li.find('.progress span');
  5.     // 避免重复创建
  6.     if ( !$percent.length ) {
  7.         $percent = $('<p class="progress"><span></span></p>')
  8.                 .appendTo( $li )
  9.                 .find('span');
  10.     }
  11.     $percent.css( 'width', percentage * 100 + '%' );
  12. });
  13. // 文件上传成功,给item添加成功class, 用样式标记上传成功。
  14. uploader.on( 'uploadSuccess'function( file {
  15.     $( '#'+file.id ).addClass('upload-state-done');
  16. });
  17. // 文件上传失败,显示上传出错。
  18. uploader.on( 'uploadError'function( file {
  19.     var $li = $( '#'+file.id ),
  20.         $error = $li.find('div.error');
  21.     // 避免重复创建
  22.     if ( !$error.length ) {
  23.         $error = $('<div class="error"></div>').appendTo( $li );
  24.     }
  25.     $error.text('上传失败');
  26. });
  27. // 完成上传完了,成功或者失败,先删除进度条。
  28. uploader.on( 'uploadComplete'function( file {
  29.     $( '#'+file.id ).find('.progress').remove();
  30. });


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

可输入下拉文本框据输入动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

.net mvc分部页.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

css中单位pxemrem和vh/vw的理解

&gt;px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。em是相对长度单位。相对于当前对象内文本的字...

让IIS支持webp格式图片让IIS支持vtt格式iis设置mime类型iis配置支持的类型

webp格式图片可以让图片体积变小。也让下载图片变得更加困难一点 在线制作webp工具 https://www.upyun.com/webp?utm_mediu...

网页上传文件断点续传的实现无视文件大小上传以及datatables基本用法

首先明白js是客户带执行代码,c#是服务器上执行代码。本地文件需要用到js处理,服务器端接受c#代码处理1.HTML页面,文件信...

如何使用图标像使用文字一样使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

使用七牛云的cdn服务提高图片的加载速度

CDN介绍CDN的全称是Content Delivery Network,即内容分发网络。CDN加速主要是加速静态资源,如网站上面上传的图片、媒体,...

通俗易懂什么是.NET?什么是.NET Framework?什么是.NET Core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

JS监听input、keydown有输入法时打字完成后触发事件

在给输入框绑定input或keydown事件时预期效果是有输入法时,输入中文后触发事件,不希望输一个字母就触发一次事件可以用到c...

修改了css后让浏览器从缓存中更新

当我们修改了css后,如果不做一些操作,浏览器是不会自动更新我们的样式文件的。除非是过期或者用户手动刷新清理缓存等。所...

C MVC RedirectToAction跳转时候传递参数Action之间传值

MVC Action之间传值,页面跳转传值方法一:路由传值很简单直接使用 RedirectToAction(string actionName, string controller...

当你工作遇到以下几种状态时请果断跳槽走人

已经有想跳槽的念头,但是一直磨磨蹭蹭、犹犹豫豫的混日子,这种念头或者一直持续,或者是不是冒出头来占据你的思维了。于...

C与Java二进制编码转换补码

在C#与Java接口对接时,需要将图片转化为二进制编码传输,这时候发现c#转换出来的编码的值是0~255的范围,而java方需要的是...
这一生多幸运赶上过你.
排名
8
文章
224
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术