Struts2 Java文件上传实战指南

需积分: 3 1 下载量 89 浏览量 更新于2024-09-10 收藏 2KB TXT 举报
"本文将介绍如何在Java中使用Struts2框架进行文件上传操作,主要涉及HTML表单、Struts2配置以及Action类的编写。" 在Java Web开发中,Struts2是一个流行的MVC框架,它提供了处理文件上传的功能。文件上传允许用户通过Web表单提交文件到服务器。下面我们将详细探讨如何实现这个功能。 首先,创建HTML表单是文件上传的第一步。在给定的代码片段中,可以看到一个简单的HTML表单,用于选择要上传的视频文件: ```html <form action="upload" method="post" enctype="multipart/form-data"> <div class="search_add"> <input type="file" name="some" accept="video/mp4,video/x-flv,video/x-rmvb,video/x-msvideo"/> <input type="submit" value="" class="btn_add"/> </div> </form> ``` 这里的`enctype="multipart/form-data"`属性至关重要,因为它指示浏览器以多部分/表单数据的形式发送表单数据,这是上传文件所必需的。`accept`属性限定了用户可以选择的文件类型,本例中仅允许上传MP4、FLV、RMVB和WMV视频文件。 接下来,我们需要在Struts2的配置文件(`struts.xml`)中设置相应的拦截器来处理文件上传。这里定义了一个名为`upload`的Action,并指定了`fileUpload`拦截器: ```xml <constant name="struts.multipart.maxSize" value="900000000"></constant> <action name="upload" class="action.redio.UploadAction"> <!-- 设置文件上传最大大小 --> <interceptor-ref name="fileUpload"> <param name="maximumSize">890000000</param> <param name="allowedTypes">video/mp4,video/x-flv,video/x-rmvb,video/x-msvideo</param> </interceptor-ref> <!-- 使用默认拦截器栈 --> <interceptor-ref name="basicStack"></interceptor-ref> <result name="success" type="redirectAction"> findRedio </result> </action> ``` `struts.multipart.maxSize`常量定义了允许上传的最大文件大小(这里是900MB)。`fileUpload`拦截器设置了允许上传的最大文件大小(890MB)以及可接受的文件类型。`basicStack`是Struts2的默认拦截器栈,包含了处理Action的基本功能。 最后,我们需要编写处理文件上传的Action类。在这个例子中,`UploadAction`继承自`BaseAction`: ```java package action.redio; import java.io.File; import org.apache.struts2.ServletActionContext; import action.BaseAction; import util.FileUtil; public class UploadAction extends BaseAction { // 定义文件字段 private File some; // 文件字段的字符串名 private String someFileName; // 文件字段的MIME类型 private String someContentType; // 省略getter和setter方法 // 处理文件上传的方法 public String execute() { try { // 获取文件存储路径 String savePath = ServletActionContext.getServletContext().getRealPath("/") + "uploads/"; // 创建保存目录(如果不存在) FileUtil.createDirIfNotExists(savePath); // 生成文件名 String fileName = FileUtil.generateUniqueFileName(someFileName); // 将上传的文件保存到服务器 FileUtil.saveFile(some, savePath, fileName); // 返回成功结果 return ActionSupport.SUCCESS; } catch (Exception e) { // 处理异常 addFieldError("some", "上传失败,请检查文件格式和大小"); return ActionSupport.ERROR; } } } ``` 在`UploadAction`中,我们声明了`File`类型的`some`字段来接收上传的文件,以及对应的文件名和内容类型。在`execute()`方法中,我们获取文件存储路径,创建目录(如果不存在),生成唯一的文件名,并保存文件到服务器。如果过程中出现任何错误,我们会返回错误信息。 当文件上传成功后,Struts2会根据配置的`result`标签进行重定向,这里重定向到`findRedio` Action。 总结来说,Java中使用Struts2进行文件上传主要包括以下几个步骤: 1. 创建HTML表单,指定`enctype="multipart/form-data"`。 2. 在Struts2配置文件中配置文件上传拦截器和Action。 3. 编写Action类处理文件上传逻辑,包括文件的保存和错误处理。 通过以上步骤,你可以实现一个基本的文件上传功能,允许用户上传特定类型的视频文件,并将它们保存到服务器上。