文件上传下载:
上传:把本地文件传到服务器上。
struts2文件上传是在fileUpload的基础上进一步的封装;
struts2文件上传的操作在<interceptor-ref name="fileUpload"/>的拦截器里面;
文件上传的三个要求:1)、表单提交为post;2)、表单里面文件上传项,文件上传项里面必须有name属性;3)、form里面enctype="multipart/form-data"
上传的步骤:
声明三个变量,生成变量的set方法
//上传的文件 (是文件上传项里面的name的值)
private File upload;
//声明上传文件名称 命名规范 文件上传项里面的name的值FileName
private String uploadFileName;
//声明上传文件的格式的mime类型,每种文件格式 对应类型 mime类型,针对不同的类型做不同的处理
private String uploadContentType;
设置变量的get和set方法;
得到上传文件的路径,在服务器里面创建文件,把上传的文件复制到服务器的文件里面
//得到上传文件的路径
String path = ServletActionContext.getServletContext().getRealPath("/img");
//把上传文件复制到服务器的一个文件里面去
//在服务器里面创建文件
File file = new File(path+"/"+uploadFileName);
//复制文件
FileUtils.copyFile(upload, file);
上传文件的问题:
它有大小限制,一般是2M,需要在常量中进行设置更改:
<constant name="struts.multipart.maxSize" value="20000000"></constant>
多文件上传:
与单文件上传的方式大同小异,只是变量的生成为数组的形式;在服务器创建文件时要先进行遍历,然后一个一个上传到服务器:
// 得到上传文件的路径
String path = ServletActionContext.getServletContext().getRealPath("/img");
for(int i=0;i<uploadimg.length;i++) {
//得到每一个文件
File file = new File(path+"/"+uploadimgFileName[i]);
//复制
FileUtils.copyFile(uploadimg[i], file);
}
文件的下载:
从服务器上将文件复制到本地。
在action配置result里面进行配置
<result name="success" type="stream">
<param name="contentDisposition">attachment;filename=${fileName}</param>
<param name="inputStream">${inputStream}</param>
</result>
(2)通过action传递fileName和inputStream
action:
private String name = "中文.jpg";
//提供fileName和inputStream的get方法
public String getFileName() {
//把文件名称进行编码
//区别不同的浏览器 User-Agent
String agent = ServletActionContext.getRequest().getHeader("User-Agent");
if (agent.contains("Firefox")) { // 火狐浏览器
try {
name = "=?UTF-8?B?"
+ new BASE64Encoder().encode(name.getBytes("utf-8"))
+ "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else { // IE及其他浏览器
try {
name = URLEncoder.encode(name, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return name;
}
public InputStream getInputStream() {
//得到下载文件的完全路径
String url = ServletActionContext.getServletContext().getRealPath("/img/"+name);
//得到下载文件的输入流
try {
InputStream in = new FileInputStream(url);
return in;
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
相关推荐
除此之外,Struts2还依赖于其他一些库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图模板,以及各种插件来支持特定的功能,如文件上传、JSON处理等。 在标签中提到了...
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....
该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意...
- `commons-fileupload.jar`: Apache Commons FileUpload库,用于处理HTTP请求中的文件上传。 - `commons-lang3.jar`: Apache Commons Lang库,提供了一些Java标准库中没有的高级字符串和对象操作工具。 - `log4j...
2. Struts2中的文件上传:Struts2提供了更简洁的文件上传方式。在JSP页面中,可以使用`<s:file>`标签来创建文件选择控件。在Action类中,使用`@SkipValidation`注解标记文件上传方法,然后定义对应的`java.io.File`...
Struts2是一个非常著名的Java Web框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性、可扩展性极强的Web应用的强大工具。标题中的"struts2-core-2.1.8.1.jar"是Struts2框架的核心库,...
### Struts2-4 标签库文件上传下载 #### 概述 Struts2框架提供了丰富的标签库,其中包含了多种用于简化Web开发过程的标签。这些标签不仅可以提高开发效率,还能增强页面的表现力和交互性。特别是对于文件的上传与...
该漏洞是由于 Struts2 中的 MultiPartRequestWrapper 类中的一个错误导致的,该错误可能会导致攻击者可以上传恶意文件,进而导致服务器崩溃或数据泄露。 修补方法 为了修复 S2-045 漏洞,我们可以采取以下步骤: 1...
在Struts2中,它用于处理文件上传和下载等操作。 9. **commons-fileupload-1.3.3.jar**:Apache Commons FileUpload是处理HTTP多部分表单数据的库,常用于处理用户上传的文件。在Struts2中,结合commons-io库,实现...
在Struts2中,文件上传和下载是常见的功能需求,它们对于用户交互性至关重要,例如用户提交表单时上传图片或文档,或者系统提供文件资源下载服务。本篇文章将深入探讨Struts2中的文件上传和下载机制。 首先,我们来...
修复S2-045:Struts 2远程执行代码漏洞,时用到的jar,漏洞影响:基于Jakarta Multipart解析器执行文件上传时可能的RCE 影响版本:Struts 2.3.5 - Struts 2.3.31 Struts 2.5 - Struts 2.5.10
标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...
Struts2-upload-jar是Apache Struts框架的一个插件,主要功能是支持文件上传和下载。Struts2作为Java EE领域中的一个流行MVC(Model-View-Controller)框架,为开发者提供了处理用户请求、展示视图以及业务逻辑集成...
- `commons-fileupload`: 处理HTTP文件上传的库,Struts2使用它来支持用户上传文件。 - `commons-lang3`: Apache Commons提供的Java实用工具类库,增强Java的基本功能。 - `javassist`: 动态代码生成库,Struts2...
样例通常包含了一些基础的功能实现,如表单验证、文件上传下载、拦截器使用等,可以帮助开发者快速上手并理解Struts2的基本用法。通过研究这些样例,开发者可以学习到如何配置Struts2、如何编写Action类、如何使用...
搭建一个简单的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
本版本支持elasticsearch java语言远程命令执行及文件上传elasticsearchgroov语言远程命令执行及文件上传struts2-005,struts2-009,struts2-013,struts2-016,struts2-019,struts2-020,struts2-devmode,struts2...
- 这个压缩包中的"apps"目录可能包含各种Struts2的示例应用,例如登录注册、CRUD操作、文件上传下载等。 - 通过分析这些示例,学习者可以了解如何实际配置和使用Struts2的各种特性。 8. **学习与实践**: - 分析...
优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...