js 文件上传插件(支持上传进度信息)
来源:互联网 发布:java graphics 方法 编辑:程序博客网 时间:2024/06/08 06:56
1.源码如下
/** * @author 孙其尧 描述:version 1.0版本 */function XUploader() {/** * 对应input对象 */var fileInput;/** * 全局回调函数,外部传入 */var onUploading, onSuccess, onFailed, onCanceled;/** * FormData对象,存储将上传的文件跟附带信息,附带信息以键值对形式存放 */var formData = new FormData();/** * 核心上传类 */var xhr = new XMLHttpRequest();/** * 初始化文件上传对象 emId为input [type = file]的Id */this.bindFiles = function(emId) {fileInput = document.getElementById(emId);fileInput.onchange = function() {var files = fileInput.files;var fileInfo = {};if (files) {var fileSize = 0;for ( var i in files) {fileSize += files[i].size;}if (fileSize > 1024 * 1024 * 1024) {fileSize = (Math.round(fileSize * 100 / (1024 * 1024 * 1024)) / 100).toString()+ 'G';} else if (fileSize > 1024 * 1024 && fileSize < 1024 * 1024 * 1024) {fileSize = (Math.round(fileSize * 100 / (1024 * 1024)) / 100).toString()+ 'M';} else if (fileSize > 1024 && fileSize < 1024 * 1024){fileSize = (Math.round(fileSize * 100 / 1024) / 100).toString()+ 'K';} else {fileSize = (Math.round(fileSize)).toString()+ 'B';}} else {}};}/** * 上传文件 */this.upload = function(url) {var name = fileInput.getAttribute("name");var fileLists = fileInput.files;if (fileLists) {for ( var i in fileLists) {formData.append(name, fileLists[i]);}}xhr.upload.addEventListener("progress", this.onProgress, false);xhr.addEventListener("load", this.onComplete, false);xhr.addEventListener("error", this.onFailed, false);xhr.addEventListener("abort", this.onCanceled, false);xhr.open("POST", url);// 修改成自己的接口xhr.send(formData);}/** * 取消上传 */this.cancel = function() {xhr.abort();}/** * 文件上传中 */this.onProgress = function(evt) {if (evt.lengthComputable) {var percentComplete = Math.ceil(evt.loaded * 100 / evt.total)+ '%';var resp = {loader : evt.loaded,total : evt.total,percent : percentComplete};if (onUploading) {onUploading(resp);}} else {if (onUploading) {onUploading('unable to compute');}}}/** * 文件上传完毕 */this.onComplete = function(evt) {if (onSuccess) {onSuccess(evt.target.responseText);}console.log("onSuccess");}/** * 文件上传失败 */this.onFailed = function(evt) {if (onFailed) {onFailed("failed");}console.log("onFailed");}/** * 文件取消上传 */this.onCanceled = function(evt) {if (onCanceled) {onCanceled("canceled");}console.log("onCanceled");}/** * 设置上传时附带的键值对信息 */this.setParams = function(mapData){if (mapData && mapData instanceof HashMap) {var keyArray = mapData.keySet();for(var i = 0; i < mapData.size(); i++) {var k = keyArray[i];formData.append(k,mapData.get(k));}} else {alert("参数数据类型错误,必须为HashMap对象");}}/** * 设置上传过程回调监听 */this.setOnUploadingListener = function(callback) {onUploading = callback;}/** * 设置上传成功回调监听 */this.setOnSuccessListener = function(callback) {onSuccess = callback;}/** * 设置上传失败回调监听 */this.setOnFailedListener = function(callback) {onFailed = callback;}/** * 设置取消上传回调监听 */this.setOnCanceledListener = function(callback) {onCanceled = callback;}}/** * 定义键值对 */function HashMap() {// 定义长度var length = 0;// 创建一个对象var obj = new Object();/** * 判断Map是否为空 */this.isEmpty = function() {return length == 0;};/** * 判断对象中是否包含给定Key */this.containsKey = function(key) {return(key in obj);};/** * 判断对象中是否包含给定的Value */this.containsValue = function(value) {for(var key in obj) {if(obj[key] == value) {return true;}}return false;};/** * 向map中添加数据 */this.put = function(key, value) {if(!this.containsKey(key)) {length++;}obj[key] = value;};/** * 根据给定的Key获得Value */this.get = function(key) {return this.containsKey(key) ? obj[key] : null;};/** * 根据给定的Key删除一个值 */this.remove = function(key) {if(this.containsKey(key) && (delete obj[key])) {length--;}};/** * 获得Map中的所有Value */this.values = function() {var _values = new Array();for(var key in obj) {_values.push(obj[key]);}return _values;};/** * 获得Map中的所有Key */this.keySet = function() {var _keys = new Array();for(var key in obj) {_keys.push(key);}return _keys;};/** * 获得Map的长度 */this.size = function() {return length;};/** * 清空Map */this.clear = function() {length = 0;obj = new Object();};/** * 将hashMap转换成json */this.toString = function() {var s = "[";var keyArray = this.keySet();for(var i = 0; i < length; i++, s += ',') {var k = keyArray[i];s += "{'" + k + "':" + obj[k] + "}";}s = s.substring(0, s.length - 1);if(s != "") {s += "]";}return s;}}
2.使用方法
1.引入XUploader.js
2.页面中定义input控件
<input type="file" name="files" id="fileUploader" multiple/>
<input type="button" onclick="uploadFile()" value="Upload" />
3.js代码
//上传进度回调函数 function getUploadingInfo(resp){ console.log(resp); } //创建文件上传对象 var uploader = new XUploader(); //通过input框id初始化 uploader.bindFiles("fileUploader"); //设置上传进度回调函数 uploader.setOnUploadingListener(getUploadingInfo); //上传 function uploadFile() { //除文件之外的键值对附带信息 var params = new HashMap(); params.put("test","123"); params.put("test2","1232"); //设置上传参数 uploader.setParams(params); //上传文件跟附带参数信息,参数为自己接口 uploader.upload('uploadCommonSoftware'); }3.运行结果
Github插件地址
阅读全文
0 0
- js 文件上传插件(支持上传进度信息)
- jquery ajaxFileUpload.js插件支持多文件上传的方法
- java ajax多文件上传并展示上传进度信息
- 基于ajax的Html5文件上传插件,带进度并支持图片预览
- 功能强大的文件上传插件带上传进度-WebUploader
- File Uploader:支持进度显示与文件拖拽的多文件上传前端JS脚本
- jsp + js 文件上传获取进度
- 上传文件(可用ajaxfileupload.js插件)
- 不带插件 ,自己写js,实现批量上传文件及进度显示
- servlet上传文件进度
- 获取文件上传进度
- 文件上传进度
- 支持多文件上传的插件uploadify
- 用JAVA实现大文件上传及显示进度信息
- JAVA实现大文件上传及显示进度信息
- 用JAVA实现大文件上传及显示进度信息
- jquery异步文件上传插件ajaxFileUpload教程(支持多文件上传)
- uploadsample(上传文件和Ajax显示上传进度)
- JAVA设计模式之工厂模式(静态工厂模式)
- Hadoop(三)
- FragmentTabHost中tab项的单击事件
- 每天一个linux命令(1):ls命令
- MySQL临时表的简单用法 在大数据量时有时会加快查询速度
- js 文件上传插件(支持上传进度信息)
- tp中订单详情中ajax更换收货地址。
- java抽象类与接口的区别
- Centos pip install mysqlclient Error
- 避免使用不必要的float(display:inline,position:relative)
- Qml底部导航
- day2-上 初识接口测试
- Android基础面试题
- 面试题集锦(持续更新)