struts2上传下载文件



Struts2是一个非常流行的Java Web框架,用于构建企业级应用程序。在Web开发中,文件上传和下载是常见的功能,例如用户可能需要上传个人照片或下载报告。本教程将重点介绍如何在Struts2框架中实现文件上传和下载。 **1. 文件上传** 在Struts2中,文件上传主要依赖于`Apache Commons FileUpload`库。确保在项目中添加了该库的依赖。接下来,我们需要创建一个表单,包含一个`<input type="file">`元素,让用户选择要上传的文件。 ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Struts2 File Upload</title> </head> <body> <h1>File Upload</h1> <s:form action="upload" enctype="multipart/form-data"> <s:file name="file" label="Choose File to Upload" /> <s:submit value="Upload" /> </s:form> </body> </html> ``` 这里,`enctype="multipart/form-data"`属性是必须的,因为它指示浏览器以多部分数据格式发送表单数据。 **2. 配置Struts2 Action** 创建一个Action类,用于处理文件上传请求。在该类中,使用`CommonsFileUpload`解析上传的文件,并保存到服务器的指定位置。 ```java import org.apache.struts2.interceptor.FileUploadInterceptor; import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadAction extends ActionSupport { private File file; private String fileName; public String execute() { if (!ServletFileUpload.isMultipartContent(request)) { return INPUT; } DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { fileName = item.getName(); file = item.getFile(); // 保存文件到服务器,例如:/uploads/ file.renameTo(new File("/uploads/" + fileName)); } } return SUCCESS; } catch (FileUploadException e) { e.printStackTrace(); return ERROR; } } // getters and setters } ``` 别忘了在`struts.xml`配置文件中添加`FileUploadInterceptor`,并配置Action的映射。 ```xml <package name="default" namespace="/" extends="struts-default"> <interceptors> <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> <interceptor-stack name="myStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="upload" class="com.example.UploadAction" method="execute"> <interceptor-ref name="myStack"/> <result name="success">/success.jsp</result> <result name="error">/error.jsp</result> </action> </package> ``` **3. 文件下载** 文件下载通常涉及创建一个Action,该Action从服务器读取文件并将其作为HTTP响应的一部分返回。在Action中,我们可以使用`InputStream`读取文件内容,并设置响应头来指示浏览器以文件形式下载数据。 ```java import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.FileInputStream; public class DownloadAction extends ActionSupport { private String fileName; public String execute() { try { HttpServletResponse response = ServletActionContext.getResponse(); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); InputStream input = new FileInputStream("/uploads/" + fileName); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buffer)) != -1) { response.getOutputStream().write(buffer, 0, bytesRead); } input.close(); return NONE; } catch (Exception e) { e.printStackTrace(); return ERROR; } } // getters and setters } ``` 同样,需要在`struts.xml`中为下载Action添加映射。 **4. 结束语** Struts2提供了一种简洁的方式来实现文件上传和下载功能。通过使用`Apache Commons FileUpload`库,我们可以轻松地处理文件流,从而实现文件的上传和下载。在实际项目中,你可能需要考虑更多细节,如错误处理、文件大小限制、文件类型检查等,以确保应用程序的安全性和稳定性。这个简单的教程应该为你提供了一个良好的起点,帮助你在Struts2项目中实现文件上传和下载功能。






























































- 1

- qq_274213152015-11-18一般吧,没有达到我想要的效果

- 粉丝: 56
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于plc的自动门控制系统论文.doc
- salvo-Rust资源
- 康通电子科技有限公司网络广播解决方案.doc
- 基于进化算法的约束多目标优化问题研究.doc
- 基于单片机的电力数据采集系统设计.pdf
- Python大作业源码小游戏-简单的滑雪游戏.zip
- 易利项目管理软件使用说明初学者用.doc
- 地铁信息系统集成简介.docx
- 教学网站设计与开发.doc
- 主成分分析及matlab实现.ppt
- 一页纸项目管理培训.pptx
- 项目管理附表模板.doc
- 网络情感日志模板【优秀9篇】.docx
- 江门项目管理知识定位分析报告.ppt
- 云计算行业就业分析策划方案.doc
- 罗克韦尔与西门子大型PLC通讯方案评析.doc


