struts2上传进度条
时间: 2023-08-28 09:06:22 浏览: 166
struts2 上传 带有进度条
4星 · 用户满意度95%
Struts2本身并不提供上传进度条的功能,但可以使用一些第三方插件来实现。
一种实现方式是使用jQuery插件uploadify,它可以在页面上显示上传进度条。步骤如下:
1. 引入jQuery和uploadify的js和css文件。
2. 在页面上定义一个文件上传的input控件,并将其与uploadify关联。
```html
<input id="file_upload" name="file_upload" type="file" multiple="true">
```
```javascript
$(function() {
$('#file_upload').uploadify({
'swf': 'uploadify.swf',
'uploader': 'uploadify.php',
'multi': true,
'auto': true,
'fileSizeLimit': '1024MB',
'onUploadProgress': function(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal) {
// 计算上传进度并更新进度条
var percent = totalBytesUploaded / totalBytesTotal * 100;
$('#progress').css('width', percent + '%');
}
});
});
```
3. 在页面上定义一个进度条控件,用于显示上传进度。
```html
<div id="progress-bar">
<div id="progress"></div>
</div>
```
4. 在服务器端处理文件上传,并返回上传进度。
```java
public String upload() throws Exception {
// 获取上传文件的输入流
InputStream inputStream = new FileInputStream(upload);
// 获取上传文件的总大小
long fileSize = upload.length();
// 创建输出流,用于保存上传文件
OutputStream outputStream = new FileOutputStream(new File(uploadFileName));
byte[] buffer = new byte[1024];
int bytesRead = 0;
long totalBytesRead = 0;
// 读取上传文件并保存
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
totalBytesRead += bytesRead;
// 计算上传进度并返回给客户端
double progress = (double) totalBytesRead / fileSize * 100;
response.getWriter().print(progress);
response.flushBuffer();
}
outputStream.close();
inputStream.close();
return SUCCESS;
}
```
需要注意的是,上传进度条的实现需要在客户端和服务器端同时进行。客户端使用uploadify插件显示进度条,服务器端在文件上传过程中计算上传进度并返回给客户端。
阅读全文