Struts2作为一款流行的Java Web框架,提供了强大的文件上传和下载功能。在Web应用中,文件上传和下载是常见的需求,比如用户提交照片、下载文档等。本实例将深入探讨Struts2如何实现这两个功能。 理解文件上传的基本原理。在HTTP协议中,表单数据默认是以文本形式发送的,但为了上传文件,我们需要使用`multipart/form-data`编码类型。Struts2通过集成Apache的Commons FileUpload库来处理这种类型的请求。 **1. 配置Struts2文件上传** 在Struts2的配置文件(struts.xml)中,我们需要启用文件上传功能。这通常涉及到以下步骤: ```xml <constant name="struts.multipart.parser" value="jakarta"/> <!-- 使用Commons FileUpload库 --> <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="fileUpload"> <param name="maximumSize">10485760</param> <!-- 设置最大上传文件大小 --> </interceptor-ref> <!-- 其他拦截器... --> </interceptor-stack> </interceptors> <package name="default" namespace="/" extends="struts-default"> <action name="*"> <interceptor-ref name="myStack"/> <!-- ... --> </action> </package> ``` **2. 创建上传表单** HTML表单需设置`enctype="multipart/form-data"`属性,并包含一个`input type="file"`元素: ```html <form action="upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="上传" /> </form> ``` **3. 创建Action处理上传** 在Struts2 Action类中,需要定义一个`java.io.File`类型的字段与表单字段对应,并添加对应的setter和getter方法。例如: ```java public class UploadAction extends ActionSupport { private File file; private String fileName; // getters and setters... public String execute() { try { File saveDir = new File("uploads"); if (!saveDir.exists()) { saveDir.mkdir(); } File saveFile = new File(saveDir, fileName); Files.copy(file.getInputStream(), saveFile.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { // 处理异常... } return SUCCESS; } } ``` **4. 文件下载** 文件下载主要涉及创建一个Action,从服务器读取文件并设置响应头,指示浏览器进行下载。以下是一个简单的下载Action示例: ```java public class DownloadAction extends ActionSupport { private String filePath; // getters and setters... public String execute() throws IOException { File file = new File(filePath); if (file.exists()) { HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); FileInputStream fis = new FileInputStream(file); ServletOutputStream sos = response.getOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) != -1) { sos.write(buffer, 0, length); } fis.close(); sos.flush(); sos.close(); } else { // 处理文件不存在的情况... } return NONE; } } ``` 在实际应用中,你可能还需要处理文件名编码、错误处理、权限控制等细节问题。此外,对于大型文件,考虑使用流式处理以减少内存消耗。Struts2的文件上传和下载功能为开发者提供了方便,使得在Java Web应用中处理文件变得更加简单。 以上就是Struts2文件上传和下载的基本实现,但请根据实际情况调整代码,确保满足项目需求,例如安全性、性能优化等方面。希望这个实例能帮助你更好地理解和应用Struts2的文件操作功能。




































































































































- 1


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


最新资源
- 可靠性软件调研报告.doc
- 小学语文句型转换复习课MicrosoftPowerPoint演示文稿.pptx
- 玩转职场PPT高档模板-ios风格扁平化设计商务实用报告.ppt
- 网络营销技术如何学习.doc
- Access图书管理系统.doc
- 用网络创造蓝色新经济.ppt
- 建行电子银行网络营销策划方案.doc
- 小企业的电子商务与客户关系管理.ppt
- 项目管理手册.docx
- 基于JSP网上商城的设计与实现毕业论文.doc
- 神经网络模型预测控制器PPT课件.ppt
- 实训7-操作系统安装和磁盘管理实训报告.doc
- 820计算机专业基础考纲.doc
- ACM最常用算法-算法讲解-ACM大赛无压力.ppt
- 社工实务与项目管理经验分享.doc
- 在VC2022年下将32位C++内嵌汇编迁移到64位.doc


