-
前端
html
<div id="uploader" class="wu-example">
<p class="text-danger">tip:请将照片统一命名为“学号+后缀名”(如16032051.jpg),照片格式为JPG/JPEG,将所有照片直接压缩打包zip文件后再上传。</p>
<div id="thelist" class="uploader-list"></div>
<div class="btns">
<div id="picker">选择文件</div>
<button id="ctlBtn" class="btn btn-info" >开始上传</button>
</div>
</div>
js
var uploader = WebUploader.create({
// 文件接收服务端。
server: '/user/uploadPhoto',
// 选择文件的按钮。可选。
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick:{
id:'#picker',
multiple:false //限制多文件上传
},
chunked: true,//开启分片上传
dnd:"#drag_box",//设置可拖拽上传容器
accept:{
title: 'Zip',
extensions: 'zip',
mimeTypes: 'application/zip,application/x-zip,application/x-zip-compressed',
},//设置文件类型限制
fileNumLimit:1 //设置文件数量限制
});
$("#ctlBtn").on('click',function () {//开始上传
uploader.upload();
})
//当有文件被选择上传时,因为只上传1个文件所以多次选择之前先清空之前的选择实现覆盖
uploader.on('beforeFileQueued',function () {
console.log("before")
uploader.reset();
$("#thelist").empty();
});
// 当有文件被添加进队列的时候
uploader.on( 'fileQueued', function( file ) {
console.log("add")
$("#thelist").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 ),
$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 + '%' );
});
uploader.on( 'uploadSuccess', function( file ,data) {
//data参数即为服务器响应数据
if(data.code==1){
$( '#'+file.id ).find('p.state').text('已上传');
}else{
$( '#'+file.id ).find('p.state').text(data.message);
}
});
uploader.on( 'uploadError', function( file ) {
$( '#'+file.id ).find('p.state').text('上传出错');
});
uploader.on( 'uploadComplete', function( file ) {
$( '#'+file.id ).find('.progress').fadeOut();
});
-
后端java
pom添加zip
<dependency>
<groupId>net.lingala.zip4j</groupId>
<artifactId>zip4j</artifactId>
<version>1.3.2</version>
</dependency>
Controller
/***
* 批量上传照片zip
* @return
*/
@RequestMapping("uploadPhoto")
public ResponseModel uploadPhoto(MultipartFile file){
String path=NGINX_LOCATION+"/photo/";
File saveFile = new File(path+System.currentTimeMillis()+".zip");
if(!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();
}
try {
file.transferTo(saveFile);
ZipFile zipFile = new ZipFile(saveFile); //创建ZipFile
zipFile.setFileNameCharset("UTF-8"); //防止乱码
FileHeader fileHeader = (FileHeader) zipFile.getFileHeaders().get(0);//获取zip文件包内信息
if(fileHeader.isDirectory()){//这里是我业务需要,判断是否解压出来直接为照片,而不包含文件夹,简单判断第一个文件是否为文件夹
saveFile.delete();
return ResponseModel.buildErrorUploadPhotoFormat();//返回zip内容错误
}
zipFile.extractAll(path);//将zip进行解压
saveFile.delete();//删除zip
return ResponseModel.buildOk();
} catch (IOException e) {
e.printStackTrace();
return ResponseModel.buildErrorUploadPhoto();
} catch (ZipException e) {
e.printStackTrace();
return ResponseModel.buildErrorUploadPhoto();
}
}
qq757682793 发布了25 篇原创文章 · 获赞 0 · 访问量 1478 私信 关注