利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】
  WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。
  jsp代码
<div class="upload_buttoncontainer">
<button class="upload_accredit"
onclick="showuploadimagesPage('upload','fade')">//onclik是打开一个窗口
<label>批量上传</label>
</button>
</div>
js代码
 (function( $ ){
     // 当domReady的时候开始初始化
     $(function() {
         var $wrap = $('#uploader'),
             // 图片容器
             $queue = $( '<ul id="filelist" class="filelist"></ul>' )
                 .appendTo( $wrap.find( '.queueList' ) ),
             // 状态栏,包括进度和控制按钮
             $statusBar = $wrap.find( '.statusBar' ),
             // 文件总体选择信息。
             $info = $statusBar.find( '.info' ),
             // 上传按钮
             $upload = $wrap.find( '.uploadBtn' ),
             // 没选择文件之前的内容。
             $placeHolder = $wrap.find( '.placeholder' ),
             $progress = $statusBar.find( '.progress' ).hide(),
             // 添加的文件数量
             fileCount = 0,
             // 添加的文件总大小
             fileSize = 0,
             // 优化retina, 在retina下这个值是2
             ratio = window.devicePixelRatio || 1,
             // 缩略图大小
             thumbnailWidth = 110 * ratio,
             thumbnailHeight = 110 * ratio,
             // 可能有pedding, ready, uploading, confirm, done.
             state = 'pedding',
             // 所有文件的进度信息,key为file id
             percentages = {},
             // 判断浏览器是否支持图片的base64
             isSupportBase64 = ( function() {
                 var data = new Image();
                 var support = true;
                 data.onload = data.onerror = function() {
                     if( this.width != 1 || this.height != 1 ) {
                         support = false;
                     }
                 }
                 data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
                 return support;
             } )(),
             // 检测是否已经安装flash,检测flash的版本
             flashVersion = ( function() {
                 var version;
                 try {
                     version = navigator.plugins[ 'Shockwave Flash' ];
                     version = version.description;
                 } catch ( ex ) {
                     try {
                         version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')
                                 .GetVariable('$version');
                     } catch ( ex2 ) {
                         version = '0.0';
                     }
                 }
                 version = version.match( /\d+/g );
                 return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );
             } )(),
             supportTransition = (function(){
                 var s = document.createElement('p').style,
                     r = 'transition' in s ||
                             'WebkitTransition' in s ||
                             'MozTransition' in s ||
                             'msTransition' in s ||
                             'OTransition' in s;
                 s = null;
                 return r;
             })(),
             // WebUploader实例
             uploader;
         if ( !WebUploader.Uploader.support('flash') && WebUploader.browser.ie ) {
             // flash 安装了但是版本过低。
             if (flashVersion) {
                 (function(container) {
                     window['expressinstallcallback'] = function( state ) {
                         switch(state) {
                             case 'Download.Cancelled':
                                 alert('您取消了更新!')
                                 break;
                             case 'Download.Failed':
                                 alert('安装失败')
                                 break;
                             default:
                                 alert('安装已成功,请刷新!');
                                 break;
                         }
                         delete window['expressinstallcallback'];
                     };
                     var swf = './expressInstall.swf';
                     // insert flash object
                     var html = '<object type="application/' +
                             'x-shockwave-flash" data="' +  swf + '" ';
                     if (WebUploader.browser.ie) {
                         html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
                     }
                     html += 'width="100%" height="100%" style="outline:0">'  +
                         '<param name="movie" value="' + swf + '" />' +
                         '<param name="wmode" value="transparent" />' +
                         '<param name="allowscriptaccess" value="always" />' +
                     '</object>';
                     container.html(html);
                 })($wrap);
             // 压根就没有安转。
             } else {
                 $wrap.html('<a href="http://www.adobe.com/go/getflashplayer" target="_blank" border="0"><img alt="get flash player" src="http://www.adobe.com/macromedia/style_guide/images/160x41_Get_Flash_Player.jpg" /></a>');
             }
             return;
         } else if (!WebUploader.Uploader.support()) {
             alert( 'Web Uploader 不支持您的浏览器!');
             return;
         }
         // 实例化
         uploader = WebUploader.create({
             pick: {
                 id: '#filePicker',
                 label: '点击选择文件'
             },
             formData: {
                 uid: 123
             },
             compress: false,//不启用压缩
             resize: false,//尺寸不改变
             dnd: '#dndArea',
             paste: '#uploader',
             swf: '../js/Uploader.swf',
             server: ‘后台’,
             method:'POST',
             // runtimeOrder: 'flash',
              accept: {
                  title: 'Images',
                  extensions: 'gif,jpg,jpeg,bmp,png',
                  mimeTypes: 'image/*'
              },
             // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候,把图片打开。
             disableGlobalDnd: true,
             fileNumLimit: 300,
             fileSizeLimit: 2000 * 1024 * 1024,    // 200 M
             fileSingleSizeLimit: 500 * 1024 * 1024    // 50 M
         });
         // 拖拽时不接受 js, txt 文件。
         uploader.on( 'dndAccept', function( items ) {
             var denied = false,
                 len = items.length,
                 i = 0,
                 // 修改js类型
                 unAllowed = 'text/plain;application/javascript ';
             for ( ; i < len; i++ ) {
                 // 如果在列表里面
                 if ( ~unAllowed.indexOf( items[ i ].type ) ) {
                     denied = true;
                     break;
                 }
             }
             return !denied;
         });
         // uploader.on('filesQueued', function() {
         //     uploader.sort(function( a, b ) {
         //         if ( a.name < b.name )
         //           return -1;
         //         if ( a.name > b.name )
         //           return 1;
         //         return 0;
         //     });
         // });
         // 添加“添加文件”的按钮,
         uploader.addButton({
             id: '#filePicker2',
             label: '继续添加'
         });
         // 添加“添加下一个”模型的按钮,
         /*uploader.addButton({
             id: '#addModel',
             label: '添加下一个'
         });*/
         uploader.on('ready', function() {
             window.uploader = uploader;
         });
         // 当有文件添加进来时执行,负责view的创建
         function addFile( file ) {
             var $li = $( '<li id="' + file.id + '"><div class="item">' +
                     '<p class="title">' + file.name + '</p>' +
                     '<p class="imgWrap"></p>'+
                     '<p class="progress"><span></span></p>' +
                     '</div></li>' ),
                 $btns = $('<div class="file-panel">' +
                     '<span class="cancel">删除</span>' +
                     '<span class="rotateRight">向右旋转</span>' +
                     '<span class="rotateLeft">向左旋转</span></div>').appendTo( $li.find('.item') ),
                 $prgress = $li.find('p.progress span'),
                 $wrap = $li.find( 'p.imgWrap' ),
                 $info = $('<p class="error"></p>'),
                 showError = function( code ) {
                     switch( code ) {
                         case 'exceed_size':
                             text = '文件大小超出';
                             break;
                         case 'interrupt':
                             text = '上传暂停';
                             break;
                         default:
                             text = '上传失败,请重试';
                             break;
                     }
                     $info.text( text ).appendTo( $li );
                 };
             if ( file.getStatus() === 'invalid' ) {
                 showError( file.statusText );
             } else {
                 // @todo lazyload
                 $wrap.text( '预览中' );
                 uploader.makeThumb( file, function( error, src ) {
                     var img;
                     if ( error ) {
                         $wrap.text( '不能预览' );
                         return;
                     }
                     if( isSupportBase64 ) {
                         img = $('<img src="'+src+'">');
                         $wrap.empty().append( img );
                     }
                 }, thumbnailWidth, thumbnailHeight );
                 percentages[ file.id ] = [ file.size, 0 ];
                 file.rotation = 0;
             }
             file.on('statuschange', function( cur, prev ) {
                 if ( prev === 'progress' ) {
                     $prgress.hide().width(0);
                 } else if ( prev === 'queued' ) {
                     $li.off( 'mouseenter mouseleave' );
                     $btns.remove();
                 }
                 // 成功
                 if ( cur === 'error' || cur === 'invalid' ) {
                     console.log( file.statusText );
                     showError( file.statusText );
                     percentages[ file.id ][ 1 ] = 1;
                 } else if ( cur === 'interrupt' ) {
                     showError( 'interrupt' );
                 } else if ( cur === 'queued' ) {
                     percentages[ file.id ][ 1 ] = 0;
                 } else if ( cur === 'progress' ) {
                     $info.remove();
                     $prgress.css('display', 'block');
                 } else if ( cur === 'complete' ) {
                     $li.append( '<span class="success"></span>' );
                 }
                 $li.removeClass( 'state-' + prev ).addClass( 'state-' + cur );
             });
             $li.on( 'mouseenter', function() {
                 $btns.stop().animate({height: 30});
             });
             $li.on( 'mouseleave', function() {
                 $btns.stop().animate({height: 0});
             });
             $btns.on( 'click', 'span', function() {
                 var index = $(this).index(),
                     deg;
                 switch ( index ) {
                     case 0:
                         uploader.removeFile( file );
                         return;
                     case 1:
                         file.rotation += 90;
                         break;
                     case 2:
                         file.rotation -= 90;
                         break;
                 }
                 if ( supportTransition ) {
                     deg = 'rotate(' + file.rotation + 'deg)';
                     $wrap.css({
                         '-webkit-transform': deg,
                         '-mos-transform': deg,
                         '-o-transform': deg,
                         'transform': deg
                     });
                 } else {
                     $wrap.css( 'filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ (~~((file.rotation/90)%4 + 4)%4) +')');
                     // use jquery animate to rotation
                     // $({
                     //     rotation: rotation
                     // }).animate({
                     //     rotation: file.rotation
                     // }, {
                     //     easing: 'linear',
                     //     step: function( now ) {
                     //         now = now * Math.PI / 180;
                     //         var cos = Math.cos( now ),
                     //             sin = Math.sin( now );
                     //         $wrap.css( 'filter', "progid:DXImageTransform.Microsoft.Matrix(M11=" + cos + ",M12=" + (-sin) + ",M21=" + sin + ",M22=" + cos + ",SizingMethod='auto expand')");
                     //     }
                     // });
                 }
             });
             $li.appendTo( $queue );
             $('.filelist').sortable();
         }
         // 负责view的销毁
         function removeFile( file ) {
             var $li = $('#'+file.id);
             delete percentages[ file.id ];
             updateTotalProgress();
             $li.off().find('.file-panel').off().end().remove();
         }
         function updateTotalProgress() {
             var loaded = 0,
                 total = 0,
                 spans = $progress.children(),
                 percent;
             $.each( percentages, function( k, v ) {
                 total += v[ 0 ];
                 loaded += v[ 0 ] * v[ 1 ];
             } );
             percent = total ? loaded / total : 0;
             spans.eq( 0 ).text( Math.round( percent * 100 ) + '%' );
             spans.eq( 1 ).css( 'width', Math.round( percent * 100 ) + '%' );
             updateStatus();
         }
         function updateStatus() {
             var text = '', stats;
             if ( state === 'ready' ) {
                 text = '选中' + fileCount + '张图片,共' +
                         WebUploader.formatSize( fileSize ) + '。';
             } else if ( state === 'confirm' ) {
                 stats = uploader.getStats();
                 if ( stats.uploadFailNum ) {
                     text = '已成功上传' + stats.successNum+ '文件,'+
                         stats.uploadFailNum + '文件上传失败,<a class="retry" href="#">重新上传</a>失败或<a class="ignore" href="#">忽略</a>'
                 }
             } else {
                 stats = uploader.getStats();
                 text = '共' + fileCount + '个(' +
                         WebUploader.formatSize( fileSize )  +
                         '),已上传' + (stats.successNum+1) + '个';
                 if ( stats.uploadFailNum ) {
                     text += ',失败' + stats.uploadFailNum + '个';
                 }
             }
             $info.html( text );
         }
         function setState( val ) {
             var file, stats;
             if ( val === state ) {
                 return;
             }
             $upload.removeClass( 'state-' + state );
             $upload.addClass( 'state-' + val );
             state = val;
             switch ( state ) {
                 case 'pedding':
                     $placeHolder.removeClass( 'element-invisible' );
                     $queue.hide();
                     $statusBar.addClass( 'element-invisible' );
                     uploader.refresh();
                     break;
                 case 'ready':
                     $placeHolder.addClass( 'element-invisible' );
                     $( '#filePicker2' ).removeClass( 'element-invisible');
                     $queue.show();
                     $statusBar.removeClass('element-invisible');
                     uploader.refresh();
                     break;
                 case 'uploading':
                     $( '#filePicker2' ).addClass( 'element-invisible' );
                     $progress.show();
                     $upload.text( '暂停上传' );
                     break;
                 case 'paused':
                     $progress.show();
                     $upload.text( '继续上传' );
                     break;
                 case 'confirm':
                     $progress.hide();
                     $( '#filePicker2' ).removeClass( 'element-invisible' );
                     $upload.text( '开始上传' );
                     /*$('#filePicker2 + .uploadBtn').click(function () {
                         window.location.reload();
                     });*/
                     stats = uploader.getStats();
                     if ( stats.successNum && !stats.uploadFailNum ) {
                         setState( 'finish' );
                         return;
                     }
                     break;
                 case 'finish':
                     stats = uploader.getStats();
                     if ( stats.successNum ) {
                         document.getElementById("shareUrl").style.visibility = 'visible';
                         createQrcode();
                     } else {
                         // 没有成功的图片,重设
                         state = 'done';
                         location.reload();
                     }
                     break;
             }
             updateStatus();
         }
         uploader.onUploadProgress = function( file, percentage ) {
             var $li = $('#'+file.id),
                 $percent = $li.find('.progress span');
             $percent.css( 'width', percentage * 100 + '%' );
             percentages[ file.id ][ 1 ] = percentage;
             updateTotalProgress();
         };
         uploader.onFileQueued = function( file ) {
             fileCount++;
             fileSize += file.size;
             if ( fileCount === 1 ) {
                 $placeHolder.addClass( 'element-invisible' );
                 $statusBar.show();
             }
             addFile( file );
             setState( 'ready' );
             updateTotalProgress();
         };
         uploader.onFileDequeued = function( file ) {
             fileCount--;
             fileSize -= file.size;
             if ( !fileCount ) {
                 setState( 'pedding' );
             }
             removeFile( file );
             updateTotalProgress();
         };
         uploader.on( 'all', function( type ) {
             var stats;
             switch( type ) {
                 case 'uploadFinished':
                     setState( 'confirm' );
                     break;
                 case 'startUpload':
                     setState( 'uploading' );
                     break;
                 case 'stopUpload':
                     setState( 'paused' );
                     break;
             }
         });
         uploader.onError = function( code ) {
             alert( '图片重复' );
         };
         $upload.on('click', function() {
             if ( $(this).hasClass( 'disabled' ) ) {
                 return false;
             }
             if ( state === 'ready' ) {
                 uploader.upload();
             } else if ( state === 'paused' ) {
                 uploader.upload();
             } else if ( state === 'uploading' ) {
                 uploader.stop();
             }
         });
         $info.on( 'click', '.retry', function() {
             uploader.retry();
         } );
         $info.on( 'click', '.ignore', function() {
             alert( 'todo' );
         } );
         $upload.addClass( 'state-' + state );
         updateTotalProgress();
     });
 })( jQuery );
后台代码
MultipartFile 需要在配置文件中进行配置上传的文件的大小,在这里我就不贴出来了
public void uploadInformation(HttpServletRequest request,
HttpServletResponse response) {
System.out.println("收到图片!");
MultipartHttpServletRequest Murequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> files = Murequest.getFileMap();// 得到文件map对象
String upaloadUrl = new File(this.getClass().getClassLoader().getResource("/").getPath()).getParentFile().getParentFile()
.getAbsolutePath()
+ "/upload/";// 得到当前工程路径拼接上文件名
File dir = new File(upaloadUrl);
if (!dir.exists())// 目录不存在则创建
dir.mkdirs();
int counter = 0;
for (MultipartFile file : files.values()) {
counter++;
String fileName = file.getOriginalFilename();
File tagetFile = new File(upaloadUrl + fileName);// 创建文件对象
if (!tagetFile.exists()) {// 文件名不存在 则新建文件,并将文件复制到新建文件中
try {
tagetFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
file.transferTo(tagetFile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
System.out.println("接收完毕");
}
这样图片批量上传的功能就实现了,当然也可以批量上传文件,只不过需要一些变动,有兴趣的可以去http://fex.baidu.com/webuploader/ 研究一下。接下来就是选择多张图片进行压缩并保存到指定路径下,关于图片在页面的显示 在这里就略过了。接下来是关于压缩文件的action代码
public void yasuoIamges(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String selids = request.getParameter("selTids");//选中图片的ID组成的字符串
String date_format = "yyyy-MM-dd_HH_mm_ss";
SimpleDateFormat f = new
SimpleDateFormat(date_format);
List<File> filelist = new ArrayList<>();
String[] uid = selids.split(",");
for (int i = 0; i < uid.length; i++) {
Images du = imagesService.getoneimage(Long
.valueOf(uid[i]));
filelist.add(new File(new File(this.getClass().getClassLoader()
.getResource("/").getPath()).getParentFile()
.getParentFile().getAbsolutePath()
+ "/" + du.getDupath()));
}
String icpath = new File(this.getClass().getClassLoader()
.getResource("/").getPath()).getParentFile().getParentFile()
.getAbsolutePath()
+ "/compress/";
File dir = new File(icpath);
if (!dir.exists())// 目录不存在则创建
dir.mkdirs();
String filename = (f.format(new Date())) + ".rar";// 压缩包格式可以改
FileOutputStream fos = new FileOutputStream(icpath + filename);
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(fos);
for (File srcFile : filelist) {
byte[] buf = new byte[BUFFER_SIZE];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
FileInputStream in = new FileInputStream(srcFile);
while ((len = in.read(buf)) != -1) {
zos.write(buf, 0, len);
}
zos.closeEntry();
in.close();
}
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils", e);
} finally {
if (zos != null) {
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
第一次写博客很多东西不是很会说,请谅解,也希望大家能有所收获。
利用WebUploader进行图片批量上传,在页面显示后选择多张图片压缩至指定路径【java】的更多相关文章
- webuploader 实现图片批量上传
		
1.导入资源 2.JSP代码 <div class="page-container"> <div class="row cl"> < ...
 - 使用WebUploader实现文件批量上传,进度条显示功能
		
知识点:利用WebUploader,实现文件批量上传,并且实时显示文件的上传进度 参考官方文档:http://fex.baidu.com/webuploader/ (1)引入三个资源 JS,CSS,S ...
 - PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件
		
PHP 多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用:http://fex.baidu.com/webuploader/gett ...
 - KindEditor图片批量上传
		
KindEditor编辑器图片批量上传采用了上传插件swfupload.swf,所以后台上传文件方法返回格式应为JSONObject的String格式(注). JSONObject格式: JSONOb ...
 - OneThink实现多图片批量上传功能
		
OneThink原生系统中的图片上传功能是uploadify.swf插件进行上传的,默认是只能上传一张图片的,但是uploadify.swf是支持多图片批量上传的,那么我们稍加改动就可实现OneThi ...
 - asp.net+swfupload 多图片批量上传(附源码下载)
		
asp.net的文件上传都是单个文件上传方式,无法执行一次性多张图片批量上传操作,要实现多图片批量上传需要借助于flash,通过flash选取多个图片(文件),然后再通过后端服务进行上传操作. 本次教 ...
 - Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
		
前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...
 - Mvc    Kissy uploader实现图片批量上传   附带瀑布流的照片墙
		
前言 KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架.它具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性.本人在一次项目中层使用这个uploader组件. ...
 - Android利用网络编程HttpClient批量上传(一个)
		
请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient ...
 
随机推荐
- spark groupByKey().mapValues
			
>>> rdd = sc.parallelize([("bone", 231), ("bone", 21213), ("jack&q ...
 - luence全文检索(数据库检索)
			
注解:从数据库中查询所有数据然后放入luence中,然后在luence来检索 package com.zhu.demo; import java.io.IOException; import java ...
 - HTTP请求错误码大全(转)
			
一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...
 - softmax function in c++
			
#include <iostream> #include <vector> #include <cmath> #include <algorithm> ...
 - Linux下 FACL详解
			
1. 什么是ACL ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置 ACL可以针 ...
 - 最近我总结的常用mate标签-常用mate标签
			
昨天开始上班 ,今天晚上不是太忙 ,来写篇博客了 meta元素共有三个可选属性(http-equiv.name和scheme)和一个必选属性(content),content定义与 http-equ ...
 - AGC16E Poor Turkeys
			
输入样例: 10 10 8 9 2 8 4 6 4 9 7 8 2 8 1 8 3 4 3 4 2 7 输出样例#6: 5 话说这题虽然不是很OI但是确实挺锻炼思维的 一开始以为是用并查集之类的东西维 ...
 - js实现水波纹背景
			
<!DOCTYPE html> <html> <head> <title>水波背景</title> <meta charset=&qu ...
 - 在dataGridView空间中添加数据
			
//查询信息sql语句 string sql = "select studentName,addres from student"; SqlDataAdapter adapter ...
 - 向listview控件中添加数据库数据
			
//连接字符串 string str = "Data Source=.;Initial Catalog=mu;User ID=sa;Password=111"; //创建数据库连接 ...