Struts2 文件操作实战:上传与下载

4星 · 超过85%的资源 需积分: 10 4 下载量 26 浏览量 更新于2024-09-12 1 收藏 293KB PDF 举报
"struts2文件上传下载教程及源代码示例" Struts2是一个流行的Java Web框架,它提供了丰富的功能,包括对文件上传和下载的支持。在Struts2中处理文件上传和下载可以让开发者轻松地实现这些常见的用户交互功能。以下是对Struts2文件上传下载的详细讲解。 文件上传: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是Apache Commons的一个组件。在HTML表单中,我们需要添加`enctype="multipart/form-data"`属性来允许文件作为二进制数据进行传输。下面是一个简单的Struts2文件上传的HTML表单示例: ```html <s:form name="Myform" action="/fileManage/upload" method="post" enctype="multipart/form-data" theme="simple"> <s:fielderror></s:fielderror> <s:file name="image" label="文件"></s:file> <s:submit id="submit" value="sbumit"></s:submit> </s:form> ``` 在上述代码中,`<s:file>`标签用于选择要上传的文件,`name`属性定义了在Action类中对应的字段名。 Action类处理文件上传: 创建一个继承自`ActionSupport`的Java类,例如`UploadAction`,并添加以下字段以接收上传的文件: ```java private List<File> image; private List<String> imageContentType; private List<String> imageFileName; ``` 同时,你需要覆盖`execute()`方法,处理文件的保存。以下是一个简化的例子: ```java @Override public String execute() throws Exception { String path = ServletActionContext.getServletContext().getRealPath("/images"); System.out.println("保存路径为" + path); // 检查并创建保存目录 File saveDir = new File(path); if (!saveDir.exists()) { saveDir.mkdirs(); } // 遍历并保存上传的文件 if (image.size() > 0) { for (int i = 0; i < image.size(); i++) { File fileToSave = new File(saveDir, imageFileName.get(i)); FileUtils.copyFile(image.get(i), fileToSave); System.out.println("文件 " + imageFileName.get(i) + " 保存成功"); } } return SUCCESS; // 或其他Struts2返回值 } ``` 在这个例子中,我们获取到保存文件的路径,创建保存目录(如果不存在),然后遍历上传的文件列表,将每个文件复制到指定位置。 文件下载: Struts2同样支持文件下载,主要通过在Action中创建一个流,然后设置响应头来实现。以下是一个简单的下载Action示例: ```java public class DownloadAction extends ActionSupport { private String fileName; public String execute() throws Exception { String realPath = ServletActionContext.getServletContext().getRealPath("/images/" + fileName); File file = new File(realPath); // 设置响应头 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 将文件内容写入输出流 FileInputStream fis = new FileInputStream(file); IOUtils.copy(fis, response.getOutputStream()); fis.close(); return NONE; } // getter and setter for fileName } ``` 在上述代码中,`Content-Disposition`头用于告诉浏览器以附件形式下载文件,而`Content-Type`头则定义了文件类型。 总结: Struts2提供了方便的文件上传和下载功能,开发者可以通过配置Action类和HTML表单轻松实现这些功能。在实际项目中,要注意处理可能出现的异常,如文件过大、文件类型限制等问题,以确保系统的稳定性和安全性。此外,还要关注文件存储的安全性,防止恶意文件上传和未授权的文件访问。