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. CY7C68013A控制传输

    大家好,你们的大熊又回来了.本篇文章我们来重点了解一下USB设备的四大传输方式之一--控制传输.不同于其他三种传输方式,控制传输有其独特的作用和功能,是一个USB设备必须支持的传输方式.控制传输对带宽 ...

  2. python进阶学习(四)

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  3. BackgroundWorker类中主要属性、方法和事件

    属性: 1.CancellationPending             获取一个值,指示应用程序是否已请求取消后台操作.通过在DoWork事件中判断CancellationPending属性可以认 ...

  4. JVM(一) OpenJDK1.8源码在Ubuntu16.04下的编译

    笔者最近在学习周志明老师编写的<深入理解Java虚拟机>一书,书中第一章的实战部分就是"自己编译JDK",不过书中提到的是OpenJDK 7的编译.由于现在Java开发 ...

  5. python常用标准库

    -------------------系统内建函数------------------- 1.字符串     str='这是一个字符串数据测试数据'对应     str[0]:获取str字符串中下标为 ...

  6. Calico 的网络结构是什么?- 每天5分钟玩转 Docker 容器技术(68)

    上一节我们部署了 Calico 网络,今天将运行容器并分析 Calico 的网络结构. 在 host1 中运行容器 bbox1 并连接到 cal_net1: docker container run ...

  7. 动态创建angular组件实现popup弹窗

    承接上文,本文将从一个基本的angular启动项目开始搭建一个具有基本功能.较通用.低耦合.可扩展的popup弹窗(脸红),主要分为以下几步: 基本项目结构搭建 弹窗服务 弹窗的引用对象 准备作为模板 ...

  8. Java课设--俄罗斯方块Tetris

    Java程序设计课程作业报告 作业:俄罗斯方块游戏 姓名 赵璐媛 学号 程序得分 90% 作业报告 得分10% 实验总分 100% 作业目的: 掌握基本的图形程序设计方法 掌握Java事件处理程序编写 ...

  9. setTimeout,setInterval你不知道的…

    javascript线程解释(setTimeout,setInterval你不知道的事) 标签: javascript引擎任务浏览器functionxmlhttprequest 2011-11-21 ...

  10. 201521123084 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...