struts2上传进度条
时间: 2023-08-26 21:06:48 浏览: 129
Struts2提供了FileUploadInterceptor拦截器来处理文件上传,但是并没有提供上传进度条的功能。为了实现上传进度条,需要借助Ajax技术。
以下是一个简单的实现上传进度条的示例:
1. 在页面中引入jQuery和jQuery UI库。
2. 使用jQuery的ajaxForm插件来提交表单,并设置上传进度条的回调函数。
```javascript
$(document).ready(function() {
$('#uploadForm').ajaxForm({
beforeSend: function() {
// 显示进度条
$("#progressBar").show();
$("#progressBar div").css("width", "0%");
},
uploadProgress: function(event, position, total, percentComplete) {
// 更新进度条
$("#progressBar div").css("width", percentComplete + "%");
},
success: function() {
// 隐藏进度条
$("#progressBar").hide();
},
error: function() {
// 隐藏进度条
$("#progressBar").hide();
}
});
});
```
3. 在服务器端,使用FileUploadInterceptor拦截器处理文件上传,并在Action中保存上传进度的状态。
```java
public class UploadAction extends ActionSupport {
private File[] files;
private String[] filesFileName;
private String[] filesContentType;
private long totalSize;
private long uploadedSize;
public String execute() throws Exception {
// 计算上传文件总大小
for (File file : files) {
totalSize += file.length();
}
// 上传文件
for (int i = 0; i < files.length; i++) {
File file = files[i];
String fileName = filesFileName[i];
String contentType = filesContentType[i];
// 处理文件上传
// ...
// 更新上传进度
uploadedSize += file.length();
double percentComplete = (double) uploadedSize / totalSize * 100;
setProgress(percentComplete);
}
return SUCCESS;
}
// 保存上传进度的状态
private void setProgress(double percentComplete) {
HttpSession session = ServletActionContext.getRequest().getSession();
session.setAttribute("uploadProgress", percentComplete);
}
// 获取上传进度的状态
public double getProgress() {
HttpSession session = ServletActionContext.getRequest().getSession();
Object progress = session.getAttribute("uploadProgress");
if (progress == null) {
return 0;
} else {
return (Double) progress;
}
}
// ...
}
```
4. 在页面中定时调用Action中的getProgress方法,更新上传进度条的状态。
```javascript
$(document).ready(function() {
setInterval(function() {
$.get("uploadProgress.action", function(progress) {
$("#progressBar div").css("width", progress + "%");
});
}, 1000);
});
```
需要注意的是,上传进度条的实现需要服务器端支持,因此需要在Action中保存上传进度的状态,并在页面中定时调用Action来获取上传进度的状态。另外,上传进度条的样式可以根据需要进行自定义。
阅读全文