专注app软件定制开发JS - 文件上传组件WebUploader使用详解1(带进度的文件上传

一、基本介绍

1,什么是 WebUploader?

专注app软件定制开发是由百度公司团队开发的一个以 HTML5 为主,FLASH 专注app软件定制开发为辅的现代文件上传组件。
官网地址:

2,功能特点

  1. 分片、并发:WebUploader 专注app软件定制开发采用大文件分片并发上传,专注app软件定制开发极大的提高了文件上传效率。
  2. 预览、压缩:WebUploader 专注app软件定制开发支持常用图片格式 jpg,jpeg,gif,bmp,png 预览与压缩,节省网络数据传输。
  3. 多途径添加文件:支持文件多选,类型过滤,拖拽(文件 & 文件夹),图片粘贴功能。
  4. HTML5 & FLASH:兼容主流浏览器,接口一致,实现了两套运行时支持,用户无需关心内部用了什么内核。
  5. MD5 秒传:当文件体积大、量比较多时,支持上传前做文件 md5 值验证,一致则可直接跳过。
  6. 易扩展、可拆分:采用可拆分机制, 将各个功能独立成了小组件,可自由搭配。

3,安装配置
(1)首先我们访问如下地址下载最新版本,并解压放到我们的项目文件夹中。
下载地址:

(2)接着在页面中将 webuploader.js 和 webuploader.css 这两个文件引入进来。其中 webuploader.css 里面内容很简单,就是定义了“选择按钮”的样式(一个蓝色按钮,具体样式见后面效果图)
注意:由于 webuploader 依赖 jQuery,所以我们项目中还需将 jQuery 引入。

    <!--引入CSS-->    <link rel="stylesheet" type="text/css" href="js/webuploader.css">    <!--引入JS-->    <script src="js/jquery-1.11.1.min.js"></script>	<script src="js/webuploader.js"></script>
  • 1
  • 2
  • 3
  • 4
  • 5

(3)而在初始化 WebUploader 时,我们还需要指定 Uploader.swf 的地址。具体配置方法见下面的样例代码部分。
注意:Uploader.swf 是在当浏览器不支持H5的情况下的备用方案。我们只需配置好路径即可,具体采用哪种方案 WebUploader 会自动选择,同时对用户体验方面也没任何区别。

二、基本用法

1,效果图
(1)点击“选择文件”按钮选择需要上传的文件,选择完毕后在下方显示出文件名。

(2)点击“开始上传”按钮后开始上传文件,同时在上传的过程中会有进度显示。

(3)同时服务端在接受并保存文件后,会将接收到的一些文件信息返回过来,客户端这边将其打印到控制台中,具体内容如下。

(4)当然我们也可以选择多个文件,然后再一起上传。
**
**
2,样例代码
(1)客户端代码(index.html)

<!DOCTYPE html><html>  <head>    <meta charset="utf-8">    <title></title>    <!--引入CSS-->    <link rel="stylesheet" type="text/css" href="js/webuploader.css">    <!--引入JS-->    <script src="js/jquery-1.11.1.min.js"></script>	<script src="js/webuploader.js"></script>    <script type="text/javascript">    $(function() {        //开始上传按钮        var $btn = $('#ctlBtn');        //文件信息显示区域        var $list = $('#thelist');        //当前状态        var state = 'pending';        //初始化Web Uploader        var uploader = WebUploader.create({            // swf文件路径            swf: '${ctx!}/assets/webuploader/Uploader.swf',            // 文件接收服务端。            //server: 'http://www.hangge.com/upload.php',            server:'${ctx!}/fileupload.do?path=uploadfilemanager',            // 选择文件的按钮。可选。            // 内部根据当前运行是创建,可能是input元素,也可能是flash.            pick: '#picker',            //设置文佳上传的类型格式           // accept: {  //不建议使用,使用时选择文件div失效             //   title: 'file',              //  extensions: 'xls,xlsx,word,doc,ppt,docx,rtf,ppt,txt,pptx,pdf',              //  mimeTypes: '.xls,.xlsx,.word,.doc,.ppt,.docx,.rtf,.ppt,.txt,.pptx,.pdf'           // }        });        // 当有文件被添加进队列的时候(选择文件后调用)        uploader.on( 'fileQueued', function( file ) {            $list.append( '<div id="' + file.id + '" class="item">' +                    '<h4 class="info">' + file.name + '</h4>' +                    '<p class="state">等待上传...</p>' +                    '</div>' );        });        // 文件上传过程中创建进度条实时显示。        uploader.on( 'uploadProgress', function( file, percentage ) {            var $li = $( '#'+file.id );            $li.find('p.state').text('上传中(' + parseInt(percentage * 100) + '%)');        });        // 文件上传成功后会调用        uploader.on( 'uploadSuccess', function( file ) {            $( '#'+file.id ).find('p.state').text('已上传');            savefilemanager("/vod/uploadfilemanager/"+file.name,file.name);        });        // 文件上传失败后会调用        uploader.on( 'uploadError', function( file ) {            $( '#'+file.id ).find('p.state').text('上传出错');        });        // 文件上传完毕后会调用(不管成功还是失败)        uploader.on( 'uploadComplete', function( file ) {            $( '#'+file.id ).find('.progress').fadeOut();        });        // all事件(所有的事件触发都会响应到)        uploader.on( 'all', function( type ) {            if ( type === 'startUpload' ) {                state = 'uploading';            } else if ( type === 'stopUpload' ) {                state = 'paused';            } else if ( type === 'uploadFinished' ) {                state = 'done';            }            if ( state === 'uploading' ) {                $btn.text('暂停上传');            } else {                $btn.text('开始上传');            }        });        // 开始上传按钮点击事件响应        $btn.on( 'click', function() {            if ( state === 'uploading' ) {                uploader.stop();            } else {                uploader.upload();            }        });    });</script><style>    #picker {        display: inline-block;    }    #ctlBtn {        position: relative;        display: inline-block;        cursor: pointer;        background: #EFEFEF;        padding: 10px 15px;        color: #2E2E2E;        text-align: center;        border-radius: 3px;        overflow: hidden;    }    #ctlBtn:hover {        background: #DDDDDD;    }</style>    <style>      #picker {        display: inline-block;      }      #ctlBtn {        position: relative;        display: inline-block;        cursor: pointer;        background: #EFEFEF;        padding: 10px 15px;        color: #2E2E2E;        text-align: center;        border-radius: 3px;        overflow: hidden;      }      #ctlBtn:hover {        background: #DDDDDD;      }    </style>  </head>  <body>    <div id="uploader" class="wu-example">        <div class="btns">            <div id="picker">选择文件</div>            <div id="ctlBtn" class="webuploader-upload">开始上传</div>        </div>        <!--用来存放文件信息-->        <div id="thelist" class="uploader-list"></div>    </div>  </body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143

(2)服务端代码(upload.java)
注意:客户端是通过 form 表单的形式提交的

package com.mcu.action;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.util.Map;import java.util.Properties;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import com.mcu.util.FileTools;@Controllerpublic class ImageUploadController {	@RequestMapping("/fileupload")	public@ResponseBody String doulefileupload(HttpServletRequest request, HttpServletResponse response) throws Exception {		response.setContentType("text/html;charset=UTF-8");		PrintWriter out = response.getWriter();		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;		Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();		MultipartFile multipartFile = null;		String fileName = null;		for (Map.Entry<String, MultipartFile> set : fileMap.entrySet()) {			multipartFile = set.getValue();// 文件名			System.out.println(multipartFile);		}		fileName = this.storeIOcdd(multipartRequest, multipartFile);//以绝对路径存储		out.print(fileName);		return fileName;	}		// 接受图片,以相对路径返回图片地址	private String storeIOcdd(HttpServletRequest request, MultipartFile file)throws Exception {		String _fileName = "";		request.setCharacterEncoding("UTF-8");		String savepath = request.getParameter("path");		String fileName = "";		String realPath = request.getSession().getServletContext().getRealPath("vod/" + savepath + "");		File f = new File(realPath);		if (!f.exists() && !f.isDirectory()) {  //是文件夹,且文件夹不存在则创建文件夹 			f.mkdirs();		}		if(f.getName().equals("software")){			FileTools.delAllFiles(realPath);		}		if (file == null) {			return "dream_ioc" + File.separator + "headpic.jpg";		}		if (file.isEmpty()) {			System.out.println("文件未上传");		} else {			_fileName = file.getOriginalFilename();			fileName = realPath + File.separator + _fileName;			File restore = new File(fileName);			try {				file.transferTo(restore);			} catch (Exception e) {				throw new RuntimeException(e);			}		}		// 返回默认的图片地址		return "vod/" + savepath + "/" + _fileName;	}	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

``
参考大佬学习,很实用

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发