最近学习了bootstrap,有结合了spring MVC写了个文件上传的示例,留做笔记,废话不多说,直接上代码
监听器类FileUploadProgressListener.Java
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
|
package com.gpl.web.listener;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;
import com.gpl.web.utils.Progress;
@Component
public class FileUploadProgressListener implements ProgressListener{
private HttpSession session;
public void setSession(HttpSession session){
this .session = session;
Progress status = new Progress();
session.setAttribute( "status" , status);
}
@Override
public void update( long bytesRead, long contentLength, int items) {
Progress status = (Progress) session.getAttribute( "status" );
status.setBytesRead(bytesRead);
status.setContentLength(contentLength);
status.setItems(items);
}
}
|
CustomerMyltipartResolver.java
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
|
package com.gpl.web.listener;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class CustomMultipartResolver extends CommonsMultipartResolver{
@Autowired
private FileUploadProgressListener progressListener;
public void setFileUploadProgressListener(FileUploadProgressListener progressListener){
this .progressListener = progressListener;
}
public MultipartParsingResult parsingResult(HttpServletRequest request){
String encoding = determineEncoding(request);
FileUpload fileUpload = prepareFileUpload(encoding);
progressListener.setSession(request.getSession());
fileUpload.setProgressListener(progressListener);
try {
List<FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
return parseFileItems(fileItems, encoding);
} catch (FileUploadBase.SizeLimitExceededException ex){
throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
} catch (FileUploadException e) {
throw new MultipartException( "异常" ,e);
}
}
}
|
进度实体类Progress.java
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
|
package com.gpl.web.utils;
public class Progress {
private long bytesRead;
private long contentLength;
private long items;
public long getBytesRead() {
return bytesRead;
}
public void setBytesRead( long bytesRead) {
this .bytesRead = bytesRead;
}
public long getContentLength() {
return contentLength;
}
public void setContentLength( long contentLength) {
this .contentLength = contentLength;
}
public long getItems() {
return items;
}
public void setItems( long items) {
this .items = items;
}
@Override
public String toString() {
return "Progress [bytesRead=" + bytesRead + ", contentLength=" + contentLength + ", items=" + items + "]" ;
}
}
|
spring配置文件需加入如下bean
1
2
3
4
5
|
<!-- 文件上传 -->
< bean id = "multipartResolver" class = "com.gpl.web.listener.CustomMultipartResolver" >
< property name = "defaultEncoding" value = "utf-8" ></ property >
< property name = "maxUploadSize" value = "838860800" ></ property >
</ bean >
|
controller层实现
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
|
/**
* 文件上传
* @param request
* @param response
* @param file
* @throws IOException
*/
@RequestMapping (value = "/upload" , method = RequestMethod.POST)
public void upload(HttpServletRequest request,HttpServletResponse response, @RequestParam ( "file" ) CommonsMultipartFile file)
{
try {
PrintWriter out;
boolean flag = false ;
if (file.getSize() > 0 ){
String path = "/asserts/upload/files/excel/" ;
String uploadPath = request.getSession().getServletContext().getRealPath(path);
System.out.println(uploadPath);
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(uploadPath,file.getOriginalFilename()));
flag = true ;
}
out = response.getWriter();
if (flag == true ){
out.print( "1" );
} else {
out.print( "2" );
}
} catch (Exception e){
e.printStackTrace();
}
}
|
前端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< div id = "uploadFileDlg" class = "easyui-dialog" style = "width:800px;text-align:center;"
closed = "true" >
< form id = "uploadFileForm" method = "post" style = "width:100%;text-align:center;padding:20px 0;" >
< input id = "file" type = "file" style = "width:500px;display:inline-block;" >
< button id = "uploadBtn" class = "easyui-linkButton" style = "width:auto;display:inline-block;" >上传</ button >
</ form >
< div class = "progress progress-bar-striped active" style = "display:none;" >
< div id = "progressBar" class = "progress-bar progress-bar-info" role = "progressbar"
aria-valuenow = "0" aria-valuemin = "0" aria-valuemax = "100"
style = "width:0%;" >
</ div >
</ div >
< table id = "uploadBatchDg" ></ table >
</ div >
|
页面ready加入的js代码
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
|
$( "#uploadBtn" ).attr( "disabled" , false );
$( "#uploadBtn" ).click( function (){
var fileValue = $( "#file" ).val();
if (fileValue == null || fileValue == "" ){
layer.msg( "请先选择文件" );
return ;
}
var obj = $( "#file" );
var photoExt=obj.val().substr(obj.val().lastIndexOf( "." )).toLowerCase(); //获得文件后缀名
if (photoExt!= ".xls" && photoExt!= ".xlsx" ){
layer.msg( "请选择xls或是xlsx格式的文件,不支持其他格式文件" );
return false ;
}
var fileSize = 0;
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
if (isIE && !obj.files) {
var filePath = obj.val();
var fileSystem = new ActiveXObject( "Scripting.FileSystemObject" );
var file = fileSystem.GetFile (filePath);
fileSize = file.Size;
} else {
fileSize = obj.get(0).files[0].size;
}
fileSize=Math.round(fileSize/1024*100)/100; //单位为KB
if (fileSize > 5000){
layer.msg( "文件不能大于5M" );
return false ;
}
$( "#progressBar" ).width( "0%" );
$( this ).attr( "disabled" , true );
$( "#progressBar" ).parent().show();
$( "#progressBar" ).parent().addClass( "active" );
uploadFile();
|
上传文件js代码
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
|
function uploadFile() {
var fileObj = $( "#file" ).get(0).files[0]; // js 获取文件对象
console.info( "上传的文件:" +fileObj);
var FileController = "${basePath}/batch/upload" ; // 接收上传文件的后台地址
// FormData 对象
var form = new FormData();
// form.append("author", "hooyes"); // 可以增加表单数据
form.append( "file" , fileObj); // 文件对象
// XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
xhr.open( "post" , FileController, true );
xhr.onload = function () {
layer.msg( "上传完成" );
$( "#uploadBtn" ).attr( 'disabled' , false );
$( "#uploadBtn" ).val( "上传" );
$( "#progressBar" ).parent().removeClass( "active" );
$( "#progressBar" ).parent().hide();
};
xhr.upload.addEventListener( "progress" , progressFunction, false );
xhr.send(form);
}
function progressFunction(evt) {
var progressBar = $( "#progressBar" );
if (evt.lengthComputable) {
var completePercent = Math.round(evt.loaded / evt.total * 100)+ "%" ;
progressBar.width(completePercent);
$( "#uploadBtn" ).val( "正在上传 " + completePercent);
}
};
|
效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/wyccyw123456/article/details/52396449