Struts2实现多文件上传及后台处理示例

需积分: 10 1 下载量 154 浏览量 更新于2024-09-13 收藏 2KB TXT 举报
本资源主要介绍了如何在Struts2框架下实现多文件上传功能,包括前端JSP页面的表单设计和后端Action类的处理代码。 在Struts2中进行多文件上传,首先需要在JSP页面创建一个支持多文件上传的表单。表单需要设置`method`为"post",`enctype`为"multipart/form-data",这是为了能够传输二进制数据,即文件内容。示例代码中的JSP页面包含两个文件上传字段,分别是`file1`和`file2`,它们都使用了Struts2的`s:filename`标签来创建输入字段。 ```jsp <form action="uploadFiles.action" name="uploadForm" method="post" enctype="multipart/form-data"> file1: <s:filename="uploadFile"/> file2: <s:filename="uploadFile"/> <input type="submit" value="submit"/> </form> ``` 在后台Action类中,我们需要处理这些上传的文件。首先,定义一个`savePath`变量,用于存储文件的保存路径,这里使用了ServletContext的`getRealPath`方法获取到Web应用的根目录。然后,在`execute`方法中遍历`uploadFile`列表,对每个文件进行读取和写入操作。`uploadFile`、`uploadFileFileName`和`uploadFileContentType`是Struts2自动绑定的属性,分别对应上传文件的File对象、文件名和文件类型。 ```java private final String savePath = HmContextListener.context.getRealPath("WEB-INF" + File.separator + "downloads"); public String execute() throws Exception { for (int i = 0; i < uploadFile.size(); i++) { InputStream is = new FileInputStream(uploadFile.get(i)); java.io.OutputStream os = new FileOutputStream(savePath + File.separator + uploadFileFileName.get(i)); byte[] buffer = new byte[4000]; int count = 0; while (-1 != (count = is.read(buffer))) { os.write(buffer, 0, count); } is.close(); os.close(); } return SUCCESS; } private List<File> uploadFile; private List<String> uploadFileFileName; private List<String> uploadFileContentType; public List<File> getUploadFile() { return uploadFile; } public void setUploadFile(List<File> uploadFile) { this.uploadFile = uploadFile; } ``` 在实际开发中,还需要考虑文件大小限制、文件类型检查、异常处理等安全性问题。例如,可以添加过滤器限制上传文件大小,或者在保存文件前检查文件类型是否符合要求,防止恶意文件上传。同时,确保文件名的安全性,避免覆盖已有文件或存在路径遍历漏洞。 此外,Struts2提供了`FileUploadInterceptor`拦截器,可以简化文件上传的处理,通过配置可以在Action中直接处理上传的文件,而无需手动处理`File`对象和流。但上述代码展示了基础的文件上传流程,对于初学者来说更易于理解。 Struts2的多文件上传涉及到前端表单的构建、后端Action的接收与保存,以及可能的安全控制。在实际应用中,应结合拦截器和其他安全措施,以提高代码的可维护性和安全性。