Struts2是一个非常流行的Java Web框架,用于构建企业级应用。在Struts2中实现文件上传功能是一项常见的需求,尤其当文件较大时,用户可能希望看到一个进度条来跟踪上传进度,提供更好的用户体验。本教程将详细介绍如何在Struts2中实现带进度条的文件上传。 我们需要在Struts2的配置文件(struts.xml)中添加一个用于处理文件上传的Action。这个Action通常会有一个接收文件的表单字段,并且需要设置`enctype="multipart/form-data"`,以支持文件上传: ```xml <package name="upload" namespace="/" extends="struts-default"> <action name="fileUpload" class="com.yourcompany.FileUploadAction"> <interceptor-ref name="defaultStack"/> <result name="success">/success.jsp</result> </action> </package> ``` 接下来,创建对应的Action类`FileUploadAction.java`,它需要继承`org.apache.struts2.actions上传Support`基类,这个基类已经包含了处理文件上传的逻辑: ```java import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.interceptor.FileUploadInterceptor; public class FileUploadAction extends ActionSupport { private File file; private String fileName; private String fileContentType; // getter and setter methods... public String execute() { // 文件保存到服务器的逻辑 // ... return SUCCESS; } } ``` 为了实现进度条效果,我们需要使用JavaScript库,如jQuery或jQuery UI,以及Ajax进行异步上传。用户在选择文件后,前端页面将通过Ajax调用Struts2的Action,同时显示进度条。例如,使用jQuery的`$.ajax()`方法: ```javascript $(document).ready(function() { $('#uploadForm').submit(function(event) { event.preventDefault(); var formData = new FormData(this); $.ajax({ url: 'fileUpload.action', type: 'POST', data: formData, async: true, cache: false, contentType: false, processData: false, xhr: function() { var xhr = new window.XMLHttpRequest(); xhr.upload.addEventListener('progress', function(e) { if (e.lengthComputable) { var percentComplete = Math.round((e.loaded / e.total) * 100); $('.progress-bar').width(percentComplete + '%'); $('.progress-bar').html(percentComplete + '%'); } }); return xhr; }, success: function(data) { // 处理成功回调 }, error: function(jqXHR, textStatus, errorThrown) { // 处理错误回调 } }); }); }); ``` 在服务器端,`FileUploadAction`需要处理接收到的文件并保存到服务器的某个位置。你可以使用Java的`java.io`或Apache Commons IO库来完成这个任务: ```java public void setFile(File file) { this.file = file; } public void setFileName(String fileName) { this.fileName = fileName; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } // 在execute()方法中保存文件 private void saveUploadedFile() { try { File saveLocation = new File("/path/to/save/directory/" + fileName); Files.copy(file.toPath(), saveLocation.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { // 处理异常 } } ``` 别忘了在`success.jsp`中显示文件上传成功的消息。至此,我们就实现了Struts2环境下带进度条的文件上传功能。 当然,这只是一个基本的实现,实际应用中可能需要考虑更多因素,比如文件大小限制、类型检查、错误处理等。此外,如果你的应用需要跨域上传,你可能还需要处理CORS设置。记住,安全性也是关键,确保对上传的文件进行验证和安全存储,防止恶意文件攻击。
- 1
- 廿指緊釦2012-07-13完全无法使用。
- 匆匆的烟斗2012-07-28不可以用,没有说明使用环境和条件
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助