Struts2 之 实现文件上传(多文件)和下载
Struts2 之 实现文件上传和下载
必须要引入的jar

commons-fileupload-1.3.1.jar
commons-io-2.2.jar
01.文件上传需要分别在struts.xml配置 和 创建文件上传必要的类、
Jsp页面的截图

Struts.xml中的配置
配置上传需要的savePath(文件上传路径)和 指定文件上传的类

<action name="upload" class="cn.wz.upload.action.UploadAction" >
<param name="savePath">/upload</param>
<result name="success">success.jsp</result>
</action>
UploadAction类中的配置
该类需要继承自ActionSupport ,重写它的execute方法。
还要设置几个必要的属性:
uploadFileName(文件名)、
savePath(文件保存路径地址)、
uploadContentType(上传文件的类型)、
File file(该属性的类型是File类型,封装了上传文件的属性)。
public String execute() throws Exception {
byte[] bytes=new byte[1024];
FileInputStream fis=new FileInputStream(getUpload());
FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName());
int lenth=fis.read(bytes);
while (lenth>0) {
fos.write(bytes, 0, lenth);
lenth=fis.read(bytes);
}
fis.close();
fos.flush();
fos.close();
return SUCCESS;
}
省略get和set方法...
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(savePath);
}

02.实现多文件上传、实现多文件上传的操作非常简单,在表单中添加多个相同的name属性的File控件,这样当表单提交时,将会提交一个数组。因此,只需要在上传Action中将原本处理单个文件的操作改成对集合的操作即可。
public String execute() throws Exception {
byte[] bytes=new byte[1024];
for (int i = 0; i < upload.length; i++) {
FileInputStream fis=new FileInputStream(getUpload()[i]);
FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName()[i]);
int lenth=fis.read(bytes);
while (lenth>0) {
fos.write(bytes, 0, lenth);
lenth=fis.read(bytes);
}
fis.close();
fos.flush();
fos.close();
}
return SUCCESS;
}
03.文件下载、Struts2为了支持文件的下载,提供了Stream结果类型,该类型的作用就是专门用于实现文件下载功能。
Stream结果类型。
该类型在实现文件下载功能时需要指定一个输入流,即inputStream参数,通过这个流就可以输出下载的文件内容。我们可能还需要对相关的参数进行配置,如MIME类型、HTTP请求头信息、缓冲区的大小等。
Stream结果了类型的配置参数
contentType:发送到浏览器的MIME类型。
contentLength:设置文件的大小。
contentDisposition:设置响应的inputStream类型的属性名称。
inputName:指定Action中提供的inputStream类型的属性名称。
bufferSize:读取和下载时的缓冲区大小。
文件下载(当前示例是在jsp页面有一个指向固定的文件地址的链接,来实现文件下载的,日后有需要的时候可以更换为动态的)
该类同样是要继承自ActionSupport
设置一些必要的属性:
InputPath (读取下载文件的目录)
fileName (下载文件的文件名)
InputStream inputstream (读取下载文件的输入流)
ContentType (下载文件的类型)
需要创建InputStream输入流
public InputStream getInputStream()throws FileNotFoundException {
String path=ServletActionContext.getServletContext().getRealPath(inputPath);
return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
}

省略get和set方法...
文件下载主要就是在struts.xml文件中的配置信息

<action name="down" class="cn.wz.upload.action.DownAction" >
<param name="inputPath">/upload</param>
<result name="success" type="stream">
<param name="contentType">application/msword</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">
attachment;filename="${fileName}"
</param>
<param name="bufferSize">4096</param>
</result>
</action>
在配置文件中,ContentType参数决定了下载问阿金的类型。不同的文件类型对应的参数值也是不同的。
ContentType对应的文件类型
文档类型>>>ContentType设置
Word>>>Application/msword
Excel>>>Application/vnd.ms-excel
PPT>>>Application/vnd.ms-powerpoint
图片>>>image/gif、image/bmp、image/jpeg
文本文件>>>text/plain
HTML网页>>>text/html
可执行文件>>>application/octet-stream
Struts2 之 实现文件上传(多文件)和下载的更多相关文章
- struts2文件上传,文件类型 allowedTypes
struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...
- SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库
SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库 /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...
- SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...
- webAPI文件上传时文件过大404错误的问题
背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...
- JavaWeb多文件上传及zip打包下载
项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分. 首先明确一点: 无法通过页面的无刷新ajax请求,直接发下载.上 ...
- struts2实现文件上传(多文件上传)及下载
一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...
- Struts2 单个文件上传/多文件上传
1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...
- Struts2文件上传--多文件上传(插件uploadify)
公司需要把以前的Struts2自带的图片上传替换掉,因为不能一个file选择多个文件,本人直接百度搜索图片插件, 貌似就它(uploadify3.2.1)在最前面,也找过很多案例, 其中有不少问题, ...
- Struts2之文件上传(单文件/多文件)
<一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...
- 文件上传命令rz和下载命令sz的安装
上一节中,我们已经搭建好了linux环境,现在我们开始使用xshell工具,连接虚拟机. 一.xshell工具简介 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Mic ...
随机推荐
- Webstorm如何配置自动补全前缀--autoprefixer
我们在写样式代码时,对不同平台会有不同的兼容性写法,会在代码前加前缀,但是手动加前缀很费时间而且很容易弄错.Webstorm编辑器是有自带补全前缀功能的,那为什么还要写这篇配置博客,因为Webstor ...
- [COGS309] [USACO 3.2] 香甜的黄油
★★ 输入文件:butter.in 输出文件:butter.out 简单对比 时间限制:1 s 内存限制:128 MB 描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖 ...
- Eddy's mistakes
Problem Description Eddy usually writes articles ,but he likes mixing the English letter uses, for ...
- nyoj_214_单调递增子序列(二)_201403182131
单调递增子序列(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...
- M - Help Jimmy DP
"Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某 ...
- [bzoj 1041][HAOI2008]圆周上的整点(枚举)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1041 分析:实质上是求(a,b,c)勾股数的个数,其中c是确定的. 对于勾股数有一组通式: a ...
- Ubuntu 16.04添加阿里云源/163源
添加国内源有个好处,比如下载软件时直接时国内的服务器,速度有保证. 以下是操作方法: 1.备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list. ...
- SQL Server memory – Internals
https://blogs.msdn.microsoft.com/karthick_pk/2013/03/16/sql-server-memory-internals/
- c++中的set_new_handler和new_handler
当operator new申请一个内存失败的时候,它会进行如下的处理步骤: 1.如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常. 2.继续申请内存 ...
- poj 3090 && poj 2478(法雷级数,欧拉函数)
http://poj.org/problem?id=3090 法雷级数 法雷级数的递推公式非常easy:f[1] = 2; f[i] = f[i-1]+phi[i]. 该题是法雷级数的变形吧,答案是2 ...