Struts2自定义文件上传与下载实践

需积分: 3 1 下载量 186 浏览量 更新于2024-09-17 收藏 111KB DOC 举报
Struts2的文件上传与下载是Java Web开发中的重要功能,它在处理用户上传和下载文件时提供了便利。本文将深入讲解如何在Struts2框架下实现文件上传和下载,特别是利用 Commons-FileUpload 这一组件。 首先,理解文件上传与下载的基本概念。在Java Web环境中,文件上传通常是通过表单完成的,表单中包含一个`<input type="file">`元素,以便用户选择要上传的文件。为了支持大文件和二进制数据,表单的`<form>`标签必须设置`enctype="multipart/form-data"`,这是FileUpload所要求的编码类型,区别于默认的`application/x-www-form-urlencoded`。 要开始使用Struts2中的文件上传,你需要下载两个相关的JAR包:`commons-fileupload.jar`和`commons-io.jar`。这两个库提供了处理文件上传所需的功能。接下来,我们看一个简单的文件上传表单示例: ```html <form action="uploadServler" method="post" enctype="multipart/form-data"> <label>Information:</label> <input type="text" name="information" /> <br /> <label>File:</label> <input type="file" name="filename" /> <br /> <input type="submit" name="SUBMIT" value="Submit" /> </form> ``` 在Struts2中,核心的FileUpload组件主要通过`FileItem`接口来操作。`FileItem`接口代表了一个表单字段,无论是文本输入还是文件上传,它都能处理。例如,`FileItem`实例可以读取文件名、大小、内容等信息,并提供写入服务器的方法。 当你收到用户提交的表单后,你需要在Struts2的Action中解析这些`FileItem`对象。以下是一个基本的Action处理方法: ```java public String handleUpload(YourActionClass action) { FileItemFactory factory = new DiskFileItemFactory(); ServletContext context = getServletConfig().getServletContext(); ServletContextHandler handler = (ServletContextHandler) context; File repository = new File(handler.getRealPath("/WEB-INF/upload")); try { List<FileItem> items = new ServletFileUpload(factory).parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 检查是否为文件 String fileName = item.getName(); InputStream inputStream = item.getInputStream(); File file = new File(repository, fileName); FileUtils.copyInputStreamToFile(inputStream, file); } } } catch (Exception e) { // 处理错误 } return "success"; // 返回上传成功后的页面 } ``` 在这里,`ServletFileUpload`负责解析请求,`DiskFileItemFactory`用于创建文件存储区域,而`FileUtils.copyInputStreamToFile()`则用于将文件内容写入服务器指定的目录。 至于文件下载,Struts2框架本身并不直接提供下载功能,但你可以结合Maven或Gradle的依赖管理,使用如Apache Commons VFS这样的库来实现。首先,你需要配置好文件存储路径,然后在Action中创建一个链接,使用`Response`对象设置Content-Disposition头来指示浏览器进行下载。 总结来说,Struts2的文件上传与下载涉及表单构建、FileItem接口的使用、JAR包的依赖、以及可能的错误处理。熟练掌握这些技术,可以帮助开发者在实际项目中高效地处理用户上传和下载文件的需求。