Java Struts2 文件上传下载功能详解

1 下载量 66 浏览量 更新于2024-08-31 收藏 83KB PDF 举报
"java中struts2实现文件上传下载功能实例解析" 在Java开发中,Struts2框架提供了处理文件上传和下载的功能。本实例将深入探讨如何在Struts2中实现这些功能,包括关键步骤、代码示例以及可能遇到的问题。 1. 文件上传 文件上传通常始于前端HTML表单,其中包含一个`<input type="file">`元素,允许用户选择本地文件。在提供的代码片段中,我们看到一个简单的JSP页面,定义了一个这样的输入字段: ```html <tr> <td align="right" bgcolor="#F5F8F9">附件:</td> <td bgcolor="#FFFFFF"> <input type="file" name="upload"/> </td> <td bgcolor="#FFFFFF"></td> </tr> ``` 在后台,Struts2 Action需要接收这些文件。这里,我们创建一个基类`BaseAction`,扩展自`ActionSupport`,并添加一些属性来存储上传的文件信息: ```java public class BaseAction extends ActionSupport { protected List<File> upload; protected List<String> uploadContentType; // 文件类型 protected List<String> uploadFileName; // 文件名 protected String savePath; // 保存路径 } ``` 接着,我们需要一个Action方法来处理文件上传。以下是一个示例上传方法: ```java public void uploadAccess(List<File> upload) { try { if (null != upload) { for (int i = 0; i < upload.size(); i++) { String path = getSavePath() + "" + getUploadFileName().get(i); System.out.println(path); // ... 其他处理逻辑,如写入文件流 } } } catch (Exception e) { // 处理异常 } } ``` 在这个方法中,你可以遍历上传的文件列表,将每个文件保存到服务器指定的路径。 2. 文件下载 文件下载涉及生成一个HTTP响应,将服务器上的文件内容发送到客户端。首先,你需要一个Action方法来获取要下载的文件: ```java public String download() { String filePath = "服务器上的文件路径"; File file = new File(filePath); // ... 检查文件是否存在,设置响应头等 return "download"; } ``` 在Struts2配置中,为这个方法定义一个“download”结果,设置Content-Disposition响应头以指示浏览器应下载文件而不是显示它: ```xml <action name="download" class="YourDownloadAction"> <result name="success" type="stream"> <param name="contentType">application/octet-stream</param> <param name="inputName">fileInputStream</param> <param name="contentDisposition">attachment;filename="your-filename.ext"</param> </result> </action> ``` 在Action中,你需要创建一个`ServletInputStream`,从文件读取内容,并将其设置为结果参数: ```java public ServletInputStream getFileInputStream() throws IOException { FileInputStream fis = new FileInputStream(file); return fis; } ``` 这样,当用户访问相应的URL时,Struts2会触发下载Action,将文件内容发送给客户端。 3. 注意事项 - 文件上传和下载时要确保正确处理异常,例如文件不存在或权限问题。 - 为了防止恶意文件上传,应检查文件类型和大小。 - 为了安全,不要将文件直接保存在Web应用的根目录下,以免被直接访问。 - 下载时,确保正确编码文件名,避免安全问题,如跨站脚本攻击。 通过以上步骤,你可以在Struts2中实现基本的文件上传和下载功能。但实际项目中可能需要更复杂的功能,如多文件上传、进度条显示、错误处理等,这需要进一步的定制和优化。