Struts简单文件下载实现

2星 需积分: 9 2 下载量 100 浏览量 更新于2024-10-02 收藏 29KB DOC 举报
"这篇资料主要介绍了如何在Struts框架下实现文件下载的功能,提供了一种简单的方法,并包含关键代码示例。" 在Struts框架中,文件下载是Web应用程序常见的需求,它允许用户从服务器获取文件。相比于文件上传,文件下载的实现过程较为简单。下面我们将详细探讨如何在Struts中实现这一功能。 首先,你需要创建一个新的Web工程。如果你使用的是MyEclipse,那么可以导入Struts支持;如果使用Eclipse,则需要手动添加Struts相关的jar包到项目类路径中。 接下来,我们将关注关键的代码部分。在Struts中,通常会创建一个Action类来处理文件下载的请求。以下是一个名为`DownloadAction`的Action类的简化示例: ```java package com.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.actions.DispatchAction; public class DownloadAction extends DispatchAction { public ActionForward down(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { // 设置字符编码格式 response.setCharacterEncoding("utf-8"); try { request.setCharacterEncoding("utf-8"); // 获取文件路径,这里假设文件位于服务器的特定目录 String filePath = "/path/to/your/file"; File file = new File(filePath); // 检查文件是否存在 if (!file.exists()) { throw new FileNotFoundException("文件不存在"); } // 设置响应头信息,包括Content-Disposition和Content-Type String fileName = "example.txt"; // 假设文件名为example.txt response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("UTF-8"), "ISO-8859-1")); response.setContentType("application/octet-stream"); // 读取文件并写入到输出流 InputStream in = new FileInputStream(file); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = in.read(buffer)) != -1) { out.write(buffer, 0, length); } in.close(); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } } ``` 在上述代码中,`down`方法是处理文件下载请求的核心。它首先设置响应的字符编码为UTF-8,然后尝试设置请求的编码。接着,它获取文件路径,检查文件是否存在。如果文件存在,就设置HTTP响应头,告知浏览器这是一个附件(通过`Content-disposition`),并指定文件名。`Content-Type`字段表示文件类型,对于未知类型,通常设置为`application/octet-stream`。最后,使用FileInputStream读取文件内容,通过Servlet的OutputStream将内容写入客户端。 当用户访问与`DownloadAction`关联的URL时,Struts会调用`down`方法,执行文件下载操作。注意,实际项目中需要处理可能出现的各种异常,例如文件不存在、IO错误等,并提供适当的错误反馈。 为了使文件下载功能更加灵活,你可以根据实际需求扩展此基础示例,比如支持多种文件类型、动态获取文件名、记录下载日志、限制下载速度等。 Struts文件下载的基本流程是:创建Action类处理请求,设置响应头,读取文件内容并写入输出流。通过理解这一过程,开发者可以轻松地在Struts应用中实现文件下载功能。