struts2一个和多个文件上传及下载
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一个和多个文件上传及下载的更多相关文章
- Struts2第六篇【文件上传和下载】
前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...
- Struts2学习(六)———— 文件上传和下载
一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮 ...
- SpringBoot下文件上传与下载的实现
原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...
- Struts2 之 实现文件上传和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
- 十六、Struts2文件上传与下载
文件上传与下载 1.文件上传前提:<form action="${pageContext.request.contextPath}/*" method="post& ...
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
回想一下,再上一篇文章Struts2实现机制,该步骤做一步一步来解决,这种决心不仅要理清再次Struts2用法.映射机制及其在深入分析.最后一个例子来介绍Struts2一种用法,这里将做一个有关文件上 ...
- Struts2学习总结——文件上传与下载
Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...
- struts2文件上传和下载
1. struts系统中的拦截器介绍 过滤器:javaweb中的服务器组件,主要针对的请求和响应进行拦截. 拦截器:主要针对方法的调用,进行拦截器,当使用代理对象调用某个方法时候 对方法的调用进行拦截 ...
- struts2学习(14)struts2文件上传和下载(4)多个文件上传和下载
四.多个文件上传: 五.struts2文件下载: 多个文件上传action com.cy.action.FilesUploadAction.java: package com.cy.action; i ...
随机推荐
- Android的47个小知识
1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environme ...
- spring-session 共享
Spring session 共享 一.引入依赖 <dependency> <groupId>redis.clients</groupId> <artifac ...
- Python常用库大全
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- 有var和没有var的本质区别
我们创建一个变量: var a = 100: 同时,大家也知道,就是不写var关键字也可以创建.在很多教程和说法中,将没有var 的这个名称称之为“全局变量”.如果我在全局直接写一个var abc = ...
- 最新城市二级联动json(2017-09)
{ '安徽': [ '合肥', '芜湖', '蚌埠', '淮南', '马鞍山', '淮北', '铜陵', '安庆', '黄山', '阜阳', '宿州', '滁州', '六安', '宣城', '池州', ...
- (1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍
1.let声明变量,var声明变量,而const声明的常量 2.let与var的区别 let可以让变量长期驻扎在内存当作 let的作用域是分块[ {快1 {快2 } }每个大括号表示一个独立的块 ...
- Java学习10——package和import
package和import语句 为了便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间,使用时,import引入相应package ...
- 201521123034《Java程序设计》第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 List中指定元素的删除(题目4-1) 1.1 实验总结 答:这题是在课堂上 ...
- 201521123036 《Java程序设计》第7周学习总结
本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 answer:用于判断Collect ...
- 201521123056 《Java程序设计》第7周学习总结
1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 1.2 解释E remove(int index)源代码 1.3 结合1. ...