1.前台
$.ajax({
type: 'GET',
cache:false,
url: 'firmware/getProgress',
data: {},
dataType: 'json',
success : function(data){
$('#proBar').css('width',data.rate+''+'%');
$('#proBar').empty();
$('#proBar').append(data.show);
console.log(data.pBytesRead);
console.log(data.pContentLength);
console.log(data.status);
$('#proBar').css('width',data.status+''+'%');
$('#proBar').empty();
$('#proBar').append(data.status+''+'%');
if(data.status == 100){
window.clearInterval(intId);
$('#proBar').append(language['wait_yun']);
}
2.
/**
* 获取上传文件进度条信息
*
* @param request
* @param response
* @return 文件上传的进度信息
* @throws Exception
*/
@RequestMapping(value = "/firmware/getProgress")
@ResponseBody
public Object process(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return (ProgressEntity) request.getSession().getAttribute("status");
}
3.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
public class ProgressEntity {
private long pBytesRead = 0L;
private long pContentLength = 0L;
private int status = 0;
private int pItems;
public long getpBytesRead() {
return pBytesRead;
}
public void setpBytesRead(long pBytesRead) {
this.pBytesRead = pBytesRead;
}
public long getpContentLength() {
return pContentLength;
}
public void setpContentLength(long pContentLength) {
this.pContentLength = pContentLength;
}
public int getpItems() {
return pItems;
}
public void setpItems(int pItems) {
this.pItems = pItems;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Override
public String toString() {
return "ProgressEntity [pBytesRead=" + pBytesRead + ", pContentLength="
+ pContentLength + ", pItems=" + pItems + "]";
}
}
4. <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver"
class="com.thundersoft.fota.utils.uploadFile.FileUploadCustomMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<!-- <property name="maxUploadSize" value="200000"/> -->
</bean>
5.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
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.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class FileUploadCustomMultipartResolver extends CommonsMultipartResolver {
private FileUploadProgressListener progressListener = new FileUploadProgressListener();
@Override
public MultipartParsingResult parseRequest(HttpServletRequest request)
throws MultipartException {
System.out.println("test FileUploadCustomMultipartResolver");
String encoding = determineEncoding(request);
FileUpload fileUpload = prepareFileUpload(encoding);
progressListener.setSession(request.getSession());
fileUpload.setProgressListener(progressListener);
try {
@SuppressWarnings("unchecked")
List<FileItem> fileItems = ((ServletFileUpload) fileUpload)
.parseRequest(request);
return parseFileItems(fileItems, encoding);
} catch (FileUploadBase.SizeLimitExceededException ex) {
throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(),
ex);
} catch (FileUploadException ex) {
throw new MultipartException(
"Could not parse multipart servlet request", ex);
}
}
}
6.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;
@Component
public class FileUploadProgressListener implements ProgressListener {
private HttpSession session;
public void setSession(HttpSession session){
this.session=session;
ProgressEntity status = new ProgressEntity();
session.setAttribute("status", status);
}
/*
* pBytesRead 到目前为止读取文件的比特数 pContentLength 文件总大小 pItems 目前正在读取第几个文件
*/
public void update(long pBytesRead, long pContentLength, int pItems) {
ProgressEntity status = (ProgressEntity) session.getAttribute("status");
status.setpBytesRead(pBytesRead);
// System.out.println("pBytesRead="+pBytesRead);
status.setpContentLength(pContentLength);
// System.out.println("pContentLength="+pContentLength);
status.setStatus((int) ((( pBytesRead + 0.0)/ pContentLength) * 100));
// System.out.println("percent="+(int) ((( pBytesRead + 0.0)/ pContentLength) * 100));
status.setpItems(pItems);
// System.out.println("pItems="+pItems);
//System.out.println("update status is : " + status);
}
}
$.ajax({
type: 'GET',
cache:false,
url: 'firmware/getProgress',
data: {},
dataType: 'json',
success : function(data){
$('#proBar').css('width',data.rate+''+'%');
$('#proBar').empty();
$('#proBar').append(data.show);
console.log(data.pBytesRead);
console.log(data.pContentLength);
console.log(data.status);
$('#proBar').css('width',data.status+''+'%');
$('#proBar').empty();
$('#proBar').append(data.status+''+'%');
if(data.status == 100){
window.clearInterval(intId);
$('#proBar').append(language['wait_yun']);
}
2.
/**
* 获取上传文件进度条信息
*
* @param request
* @param response
* @return 文件上传的进度信息
* @throws Exception
*/
@RequestMapping(value = "/firmware/getProgress")
@ResponseBody
public Object process(HttpServletRequest request,
HttpServletResponse response) throws Exception {
return (ProgressEntity) request.getSession().getAttribute("status");
}
3.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
public class ProgressEntity {
private long pBytesRead = 0L;
private long pContentLength = 0L;
private int status = 0;
private int pItems;
public long getpBytesRead() {
return pBytesRead;
}
public void setpBytesRead(long pBytesRead) {
this.pBytesRead = pBytesRead;
}
public long getpContentLength() {
return pContentLength;
}
public void setpContentLength(long pContentLength) {
this.pContentLength = pContentLength;
}
public int getpItems() {
return pItems;
}
public void setpItems(int pItems) {
this.pItems = pItems;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
@Override
public String toString() {
return "ProgressEntity [pBytesRead=" + pBytesRead + ", pContentLength="
+ pContentLength + ", pItems=" + pItems + "]";
}
}
4. <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
<bean id="multipartResolver"
class="com.thundersoft.fota.utils.uploadFile.FileUploadCustomMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->
<!-- <property name="maxUploadSize" value="200000"/> -->
</bean>
5.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
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.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
public class FileUploadCustomMultipartResolver extends CommonsMultipartResolver {
private FileUploadProgressListener progressListener = new FileUploadProgressListener();
@Override
public MultipartParsingResult parseRequest(HttpServletRequest request)
throws MultipartException {
System.out.println("test FileUploadCustomMultipartResolver");
String encoding = determineEncoding(request);
FileUpload fileUpload = prepareFileUpload(encoding);
progressListener.setSession(request.getSession());
fileUpload.setProgressListener(progressListener);
try {
@SuppressWarnings("unchecked")
List<FileItem> fileItems = ((ServletFileUpload) fileUpload)
.parseRequest(request);
return parseFileItems(fileItems, encoding);
} catch (FileUploadBase.SizeLimitExceededException ex) {
throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(),
ex);
} catch (FileUploadException ex) {
throw new MultipartException(
"Could not parse multipart servlet request", ex);
}
}
}
6.
/*
* Copyright © 2012-2015 Thunder Software Technology Co., Ltd.
* All rights reserved.
*/
package com.thundersoft.fota.utils.uploadFile;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.ProgressListener;
import org.springframework.stereotype.Component;
@Component
public class FileUploadProgressListener implements ProgressListener {
private HttpSession session;
public void setSession(HttpSession session){
this.session=session;
ProgressEntity status = new ProgressEntity();
session.setAttribute("status", status);
}
/*
* pBytesRead 到目前为止读取文件的比特数 pContentLength 文件总大小 pItems 目前正在读取第几个文件
*/
public void update(long pBytesRead, long pContentLength, int pItems) {
ProgressEntity status = (ProgressEntity) session.getAttribute("status");
status.setpBytesRead(pBytesRead);
// System.out.println("pBytesRead="+pBytesRead);
status.setpContentLength(pContentLength);
// System.out.println("pContentLength="+pContentLength);
status.setStatus((int) ((( pBytesRead + 0.0)/ pContentLength) * 100));
// System.out.println("percent="+(int) ((( pBytesRead + 0.0)/ pContentLength) * 100));
status.setpItems(pItems);
// System.out.println("pItems="+pItems);
//System.out.println("update status is : " + status);
}
}