前天项目中需要用到一个图片上传的功能,本来以为就是一个简单的对文件对象的一个流操作,非常简单。但着手开始写的时候才发现,以前了解的文件的上传和下载是基于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-文件上传
该漏洞与Apache Struts2 (S2-045)远程代码执行漏洞原理基本相同,均是由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过发送恶意的数据包,利用该漏洞在受影响服务器上执行任意...
在struts2基础上实现的包括单文件、多文件的上传及下载
struts2文件上传struts2文件上传struts2文件上传struts2文件上传struts2文件上传struts2文件上传struts2文件上传struts2文件上传
Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码
struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载
struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload
K8_Struts2_EXP S2-045 & 任意文件上传 20170310,无密码,2017版,最新版
Struts2多个文件上传 多个文件上传分为List集合和数组,下面我们着重介绍一下list集合的上传。都大同小异。
这是struts2中文件上传的必须组件,
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文件上传实例,程序员宝典......
struts2文件上传-基本
Struts1 实现的文件上传 有分页技术 不过没有下载 可以实现的一个小项目 很适合入门Struts1 或者说是想了解Struts1文件上传的新手的一个项目
里面包括的是实现struts2文件上传所需要的全部jar包
这是我结合网络资源。。和我对一些平时知识积累做的一个文件上传。。可能还存在漏洞。。请爱学者补全。。它将是一个完美的文件上传资料。。希望能给你的学习带来方便
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的...
Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip Struts2文件批量上传.zip
struts2文件上传的两种方法,单文件上传与多文件上传,很经典的,是我总结的两种方法,要看struts2文件上传,大家一定要下载看看啊