前天项目中需要用到一个图片上传的功能,本来以为就是一个简单的对文件对象的一个流操作,非常简单。但着手开始写的时候才发现,以前了解的文件的上传和下载是基于Servlet实现对流文件的操作,本次项目中的控制器使用的Struts2,难道让允许在众多Action中夹杂上Servlet?即使我能做到这也不符合项目规约,记得以前在学习Struts2的时候提到过Struts2的几个核心jar包中就包括文件上传下载的jar包,但是从来没有用过。第一直觉就是去查Struts2的官方文档,但找了半天没有找到Struts2的AIP,网上大多数都Struts2的API就是将Struts2的官方文档转换成了chm格式。知道了Struts2有个文件上传下载的包,没用过,本来很简单的东西瞬间又变成的很复杂的东西。又开始了在网上的寻找。。。
不过功夫还是不负有心人,看了N多资料后。。。有了点自己小小的总结。
Struts2提供的文件上传下载确实呗简单。。。。
就以图片上除为例子:
核心代码就 3 句,其他全是围绕这3句核心代码写的,还有相应的geter和seter
//1、得到图片将要写入的路径
String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径
//2、创建一个在此路径下的文件
File saveFile = new File(new File(realPath),fileTestFileName); //在该实际路径下实例化一个文件
//3、将上传文件复制到以上实例化的文件中,这部可能会抛出异常需要捕获
FileUtils.copyFile(fileTest, saveFile);
package com.ibm.action;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class Upload extends ActionSupport{
private File fileTest; //接收这个上传的文件
private String fileTestFileName; //Struts2提供的格式,在文件名后+FileName就是上传文件的名字
public File getFileTest() {
return fileTest;
}
public void setFileTest(File fileTest) {
this.fileTest = fileTest;
}
public String getFileTestFileName() {
return fileTestFileName;
}
public void setFileTestFileName(String fileTestFileName) {
this.fileTestFileName = fileTestFileName;
}
@Override
public String execute() throws Exception {
String[] str = { ".jpg", ".jpeg", ".bmp", ".gif" };
//限定文件大小是4MB
if(fileTest==null || fileTest.length()>4194304 ){
return "imageError";
}
for (String s : str) {
if (fileTestFileName.endsWith(s)) {
String realPath = ServletActionContext.getServletContext().getRealPath("/images");//实际路径
File saveFile = new File(new File(realPath),fileTestFileName); //在该实际路径下实例化一个文件
//判断父目录是否存在
if(!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();
}
try {
//执行文件上传
//FileUtils 类名 org.apache.commons.io.FileUtils;
//是commons-io包中的,commons-fileupload 必须依赖 commons-io包实现文件上次,实际上就是将一个文件转换成流文件进行读写
FileUtils.copyFile(fileTest, saveFile);
} catch (IOException e) {
return "imageError";
}
}
}
return "imageSuccess";
}
}
分享到:
相关推荐
该漏洞是由于 Struts2 中的 MultiPartRequestWrapper 类中的一个错误导致的,该错误可能会导致攻击者可以上传恶意文件,进而导致服务器崩溃或数据泄露。 修补方法 为了修复 S2-045 漏洞,我们可以采取以下步骤: 1...
该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意...
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List<FileInfo>`类型的字段,用于接收上传的文件...
在Struts2框架中,实现文件上传需要进行一系列配置和编程。下面我们将深入探讨Struts2文件上传的配置和实现。 首先,为了支持文件上传,我们需要在Struts2的核心配置文件`struts.xml`中添加相应的拦截器。Struts2...
除此之外,Struts2还依赖于其他一些库,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图模板,以及各种插件来支持特定的功能,如文件上传、JSON处理等。 在标签中提到了...
标题中的“K8_Struts2_EXP S2-045 & 任意文件上传 20170310”指的是一个与Struts2框架相关的安全漏洞,具体为S2-045漏洞,该漏洞允许攻击者进行任意文件上传。20170310可能是漏洞被发现或公开的日期,也可能是指该...
Struts2是一个非常著名的Java Web框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了构建可维护性、可扩展性极强的Web应用的强大工具。标题中的"struts2-core-2.1.8.1.jar"是Struts2框架的核心库,...
Struts2-upload-jar是Apache Struts框架的一个插件,主要功能是支持文件上传和下载。Struts2作为Java EE领域中的一个流行MVC(Model-View-Controller)框架,为开发者提供了处理用户请求、展示视图以及业务逻辑集成...
Struts1.2和Commons-Fileupload是Java Web开发中用于实现文件上传的两个重要组件。Struts1.2是Apache的一个开源框架,主要用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Commons-Fileupload则是Apache ...
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在Struts2中,文件上传功能是通过第三方库来实现的,其中最常用的就是Apache Commons FileUpload和Apache Commons IO。这里提到的"commons-fileupload-1.2.1.jar"和"commons-io-1.4.jar"就是这两个库的特定版本。 *...
- `commons-fileupload.jar`: Apache Commons FileUpload库,用于处理HTTP请求中的文件上传。 - `commons-lang3.jar`: Apache Commons Lang库,提供了一些Java标准库中没有的高级字符串和对象操作工具。 - `log4j...
1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`<result>`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...
2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`<constant name="struts.multipart.parser...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
Struts2 文件上传是Web开发中的一个重要功能,它允许用户从他们的本地计算机向服务器传输文件。在Struts2框架中,文件上传是通过特定的拦截器实现的,这些拦截器处理了文件上传请求并提供了安全性和大小限制。下面将...
样例通常包含了一些基础的功能实现,如表单验证、文件上传下载、拦截器使用等,可以帮助开发者快速上手并理解Struts2的基本用法。通过研究这些样例,开发者可以学习到如何配置Struts2、如何编写Action类、如何使用...
在Struts2中,文件上传功能是常见的需求,比如用户可能需要上传个人照片、文档或者其他类型的文件。在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解...