struts2的文件上传相比我们自己利用第三方jar包(commons-fileupload-1.2.1.jar   commons-io-1.3.2.jar )要简单的多,当然struts2里面也是用的这两个jar包,不过人家封装好了,方便我们使用。

单文件上传:

1.action定义一个File变量,名字和表单name一样,文件会自动封装到这个对象中去

2.action定义一个String变量,名字是表单name名字+FileName,如下的myfileFileName,文件名字会自动封装到此对象中

3.工具类 FileUtils.copyFile(需要上传的文件, 目标文件)  ,如下FileUtils.copyFile(myfile, deskFile)

页面:

  <form action="upload" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="myfile"></input><br/>
<input type="submit" value="上传"></input>
</form>

xml:

<action name="upload" class="ni.jun.yang.action.UploadAction" >
<param name="path">images</param> <!-- 定义上传存放的文件夹名字-->
<result name="success">welcome.jsp</result>
</action>

action:

import java.io.File;
import java.util.Date; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class UploadAction implements Action{
private File myfile;
private String myfileFileName;
private String path;
public File getMyfile() {
return myfile;
}
public void setMyfile(File myfile) {
this.myfile = myfile;
}
public String getMyfileFileName() {
return myfileFileName;
}
public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@Override
public String execute() throws Exception {
String filePath = ServletActionContext.getRequest().getRealPath(path);
File newFile = new File(filePath);
if(!newFile.exists()){
newFile.mkdirs();
}
File deskFile = new File(filePath + "/"+new Date().getTime()+"_"+myfileFileName);
FileUtils.copyFile(myfile, deskFile);
return SUCCESS;
} }

多文件上传:

1.和单文件上传一样,只不过用数组或集合来接收文件对象,不过表单中type = file 的标签的name属性要一样,其他和单文件上传一样

页面:

<form action="upload2" method="post" enctype="multipart/form-data">
名字:<input type="text" name="myname"></input><br/>
文件1:<input type="file" name="myfiles"></input><br/>
文件2:<input type="file" name="myfiles"></input><br/>
文件3:<input type="file" name="myfiles"></input><br/>
<input type="submit" value="上传"></input>
</form>

xml:

<action name="upload2" class="ni.jun.yang.action.UploadAction2" >
<param name="path">images2</param> <!-- 定义存放文件夹的名字-->
<result name="success">image.jsp</result>
<result name="error">upload.jsp</result>
</action>

action:

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; public class UploadAction2 implements Action {
private String myname;
private List<File> myfiles;
private List<String> myfilesFileName;
private String path;
private List<String> newName = new ArrayList<>(); public List<String> getNewName() {
return newName;
} public String getMyname() {
return myname;
} public void setMyname(String myname) {
this.myname = myname;
} public List<File> getMyfiles() {
return myfiles;
} public void setMyfiles(List<File> myfiles) {
this.myfiles = myfiles;
} public List<String> getMyfilesFileName() {
return myfilesFileName;
} public void setMyfilesFileName(List<String> myfileFileName) {
this.myfilesFileName = myfileFileName;
} public String getPath() {
return path;
} public void setPath(String path) {
this.path = path;
} @Override
public String execute() throws Exception {
boolean flag = false;
String filePath = ServletActionContext.getRequest().getRealPath(path);
File newFile = new File(filePath);
if(!newFile.exists()){
newFile.mkdirs();
}
List<File> list = getMyfiles();
List<String> nameList = getMyfilesFileName();
// System.out.println(list.size());
if(list != null && list.size() >0){
for (int i = 0; i < list.size(); i++) {
String newPath = new Date().getTime() + "_" + nameList.get(i);
File deskFile = new File(filePath + "/" +newPath);
// System.out.println(nameList.get(i));
newName.add(newPath);
FileUtils.copyFile(list.get(i), deskFile);
flag = true;
}
}
if(flag){
System.out.println(myname);
return SUCCESS;
}else{
return ERROR;
}
}
}

文件下载:  

1.文件下载和文件上传差不多,找到要下载的文件对象,和要下载到哪儿,创建2个File对象,然后就相当于是把 上传时候 FileUtils.copyFile(需要上传的文件, 目标文件)  中的两个参数换下位置

页面:jstl表达式显示上传的多个文件

<c:forEach items="${newName }" var="image">
<img src="data:images2/${image }"><a href="download?filename=${image }">下载</a>
</c:forEach>

  xml:

<action name="download" class="ni.jun.yang.action.DownloadAction" >
<param name="path">image</param>
<result name="success">welcome.jsp</result>
<result name="error">image.jsp</result>
</action>

action:

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class DownloadAction implements Action {
private String filename;
private String path; public String getFilename() {
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} public String getPath() {
return path;
} public void setPath(String path) {
this.path = path;
} @Override
public String execute() throws Exception {
String newPath = "D:\\"+path; //定义下载的路径
String oldPath = ServletActionContext.getRequest().getRealPath("images2");//获取资源的路径
System.out.println(newPath + "/" +filename);
System.out.println(oldPath);
File deskFile = new File(newPath + "/" +filename); //目标对象
File oldFile = new File(oldPath+"/"+filename); //资源对象
FileUtils.copyFile(oldFile, deskFile);
return SUCCESS;
} }

  

struts2一个和多个文件上传及下载的更多相关文章

  1. Struts2第六篇【文件上传和下载】

    前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...

  2. Struts2学习(六)———— 文件上传和下载

    一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮 ...

  3. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  4. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

  5. 十六、Struts2文件上传与下载

    文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...

  6. 【SSH2(实用文章)】--Struts2文件上传和下载的例子

    回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...

  7. Struts2学习总结——文件上传与下载

    Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...

  8. struts2文件上传和下载

    1. struts系统中的拦截器介绍 过滤器:javaweb中的服务器组件,主要针对的请求和响应进行拦截. 拦截器:主要针对方法的调用,进行拦截器,当使用代理对象调用某个方法时候 对方法的调用进行拦截 ...

  9. struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载

    四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; i ...

随机推荐

  1. [读书笔记] 三、搭建基于Spring boot的JavaWeb项目

    一.POM <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  2. Tornado-数据库(torndb包)

    1.torndb数据库简介     在Tornado3.0版本以前提供tornado.database模块用来操作MySQL数据库,而从3.0版本开始,此模块就被独立出来,作为torndb包单独提供. ...

  3. C# 单例模式(Singleton Pattern)(转SuagrMatl)

    单例模式的定义: 确保一个类只有一个实例,并提供一个全局访问点. 首先实例大家应该都明白就是类生成对象的过程简单的就是String s=new String(),则s就是个实例. Q:如何只生成一个实 ...

  4. C++中4个类型转换相关的关键字/特点/应用场合

    reinterpret_cast是C++里面的一个强制类型转换符,能够将任何的指针类型转换成其他的任何指针类型:能够将任何的整数类型转换成指针类型,反之亦然:滥用reinterpret_cast强制类 ...

  5. C# 实现AOP 的几种常见方式

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的中统一处理业务逻辑的一种技术,比较常见的场景是:日志记录,错误捕获 ...

  6. Spring加载properties文件的属性的值

    要使用配置文件的值首先在spring.xml配置加载properties文件 <context:property-placeholder location="classpath:ife ...

  7. tomcat 和 jboss access log 日志输出详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt179 工作中nginx+jboss/tomcat反向代理集成,想打开后端jb ...

  8. Intellij Idea 13 快捷键(与Eclipse比对)以及基本的设置

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt404 刚到新公司,用的台式机配置不给力,Eclipse很不给力,几个项目一起 ...

  9. IPv4子网掩码回顾

    子网掩码的介绍: IP协议标准规定:每一个使用子网的节点都选择一个32位的位模式,若位模式中的某位置为1,则对应IP地址中的某位就为网络地址(包括网络部分和子网号)中的一位:若位模式中的某位置0,则对 ...

  10. 【集美大学1411_助教博客】团队作业5——测试与发布(Alpha版本)

    同学们好像都进入了状态,任务都完成的不错,测试与发布是一个软件的非常重要的环节,每年双11前夕是阿里巴巴加班最严重的时期,这是因为他们在不断的测试,因为他们不想在双11到来之时有任何差池.所以无论你的 ...