上传文件是很多Web程序都具有的功能。Struts2本身没有提供解析上传文件内容的功能,它使用第三方的文件上传组件提供对文件上传的支持。所以我们要想利用Struts2实现文件上传的功能,首先要将commons-fileupload-1.2.1.jar和commons-io-1.4.jar复制到项目的WEB-INF/lib目录下。
我们知道,Struts1.x的上传组件需要一个ActionForm来辅助传递文件,而Struts2的上传组件却很简单,只用一个拦截器:org.apache.struts2.interceptor.FileUploadInterceptor(这个拦截器不用配置,是自动装载的),它负责调用底层的文件上传组件解析文件内容,并为Action准备与上传文件相关的属性值。这里要强调的是:处理文件上传请求的Action必须提供特殊样式命名的属性。例如,假设表单中文件选择框的名字为upload,那么Action就应该提供以下三个属性upload,uploadFileName,uploadContentType来分别表示上传文件的File对象、上传文件名以及上传文件内容类型。很多人因为忽略了这一点而犯错误。
下面是上传单个文件的JSP页面代码singleUpload.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传单个文件</title>
</head>
<body>
<s:actionerror />
<s:form action="upload" method="post" enctype="multipart/form-data">
<s:file name="upload" label="文件名" />
<s:textfield name="description" label="文件描述" />
<s:submit value="上传" />
</s:form>
</body>
</html>
注意粗体部分的设置,这是有上传控件的表单所要求的格式。下面是用于上传的动作类的完整代码:
package org.leno.struts2.action;
import java.io.*;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
// 代表上传文件的File对象
private File upload;
// 上传文件名
private String uploadFileName;
// 上传文件的MIME类型
private String uploadContentType;
// 上传文件的描述信息
private String description;
// 保存上传文件的目录,相对于WEB应用程序的根路径,在struts.xml中配置
private String uploadDir;
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUploadDir() {
return uploadDir;
}
publicfont-size: 11pt; color: black; font-family
分享到:
相关推荐
commons-fileupload-1.2.1.jar//文件上传时用的,为了以后用到,最好加入 commons-io-1.3.2.jar//同上 commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar struts2-core-2.2.1.1....
除此之外,Struts2还依赖于其他一些库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图模板,以及各种插件来支持特定的功能,如文件上传、JSON处理等。 在标签中提到了...
Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架,主要提供两个版本框架产品:Struts 1和Struts 2。 Apache Struts 2.3.5 - 2.3.31版本...
1. **Struts2核心组件** - `struts2-core.jar`: 这是Struts2的核心库,包含了Action、Result、Interceptor等核心类,以及配置解析器和ActionContext等。它是处理HTTP请求、执行业务逻辑和渲染视图的核心。 2. **...
该漏洞是由于 Struts2 中的 MultiPartRequestWrapper 类中的一个错误导致的,该错误可能会导致攻击者可以上传恶意文件,进而导致服务器崩溃或数据泄露。 修补方法 为了修复 S2-045 漏洞,我们可以采取以下步骤: 1...
在压缩包子文件的文件名称列表"struts_jar"中,很可能包含的是与Struts2相关的所有依赖库,便于构建一个完整的Struts2应用环境。使用这样的集合可以快速搭建Struts2项目,并确保所有必要的库都已就绪。 总结来说,...
1. 使用Struts2的拦截器来处理文件上传,可以更好地控制和管理文件上传过程。 2. 为文件上传和下载操作编写单元测试,确保其稳定性和正确性。 3. 保持代码的可读性和可维护性,遵循良好的编程规范。 以上是对...
修复S2-045:Struts 2远程执行代码漏洞,时用到的jar,漏洞影响:基于Jakarta Multipart解析器执行文件上传时可能的RCE 影响版本:Struts 2.3.5 - Struts 2.3.31 Struts 2.5 - Struts 2.5.10
"struts2-多文件上传2"这个项目显然是关于如何在Struts2中实现多文件上传功能的一个实例,特别是通过使用数组的方式来处理多个文件。 在Struts2中,多文件上传的核心在于使用`<s:file>`标签,它可以嵌套在表单中,...
- `commons-fileupload`: 处理HTTP文件上传的库,Struts2使用它来支持用户上传文件。 - `commons-lang3`: Apache Commons提供的Java实用工具类库,增强Java的基本功能。 - `javassist`: 动态代码生成库,Struts2...
1. **Action类的配置**:首先,你需要创建一个Struts2 Action类,该类将处理文件上传请求。在Action类中,定义一个`List<ultipartFile>`类型的属性,用于存储上传的文件。Struts2的`@Result`注解用于指定文件上传...
在Struts2中,它用于处理文件上传和下载等操作。 9. **commons-fileupload-1.3.3.jar**:Apache Commons FileUpload是处理HTTP多部分表单数据的库,常用于处理用户上传的文件。在Struts2中,结合commons-io库,实现...
1. **配置文件**:在Struts2框架中,`struts.xml`是核心配置文件,用于定义Action、Result和其他配置。为了使用文件上传功能,你需要在该文件中添加相应的配置,比如指定处理文件上传的Action类和结果类型。 2. **...
在Struts2中,文件上传和下载是常见的功能需求,它们对于用户交互性至关重要,例如用户提交表单时上传图片或文档,或者系统提供文件资源下载服务。本篇文章将深入探讨Struts2中的文件上传和下载机制。 首先,我们来...
首先,为了支持文件上传,我们需要在Struts2的核心配置文件`struts.xml`中添加相应的拦截器。Struts2内置了一个名为`params`的拦截器,可以处理表单数据,但不包括文件。因此,我们需要引入`fileUpload`拦截器,该...
本版本支持elasticsearch java语言远程命令执行及文件上传elasticsearchgroov语言远程命令执行及文件上传struts2-005,struts2-009,struts2-013,struts2-016,struts2-019,struts2-020,struts2-devmode,struts2...
搭建一个简单的struts2开发环境 开发Struts2应用最少需要的JAR: a. struts2-core-2.x.x.jar : Struts2 框架的核心... commons-fileupload-1.2.1.jar文件上传组件,2.1.6版本后必须加入此文件 g. commons-io-1.x.x.jar
样例通常包含了一些基础的功能实现,如表单验证、文件上传下载、拦截器使用等,可以帮助开发者快速上手并理解Struts2的基本用法。通过研究这些样例,开发者可以学习到如何配置Struts2、如何编写Action类、如何使用...
优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...