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学习总结——文件上传与下载
Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...
- 4.struts2中的文件上传,下载
Struts2中文件的上传下载,是借用commons里面的包实现文件的上传,需要导入两个jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 实现 ...
- struts2中的文件上传和下载
天下大事,必做于细.天下难事,必作于易. 以前见过某些人,基础的知识还不扎实就去学习更难的事,这样必定在学习新的知识会非常迷惑结果 再回来又一次学习一下没有搞懂的知识,这必定会导致学习效率的下降!我写 ...
- 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框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...
- struts2实现文件上传和下载
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- 笨鸟先飞之Java(一)--使用struts2框架实现文件上传
无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...
随机推荐
- URLEncode与URLDecode总结与实现
URLEncode: 用于编码URL字符串,数字和字母保持不变,空格变为'+',其他(如:中文字符)先转换为十六进制表示,然后在每个字节前面加一个标识符%,例如:“啊”字 Ascii的十六进制是0xB ...
- 统一回复《怎么学JavaScript?》
作者:小不了链接:https://zhuanlan.zhihu.com/p/23265155来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信问我( ...
- 聊聊CSS postproccessors
阿里妈妈 @一丝 准备发布其CSSGrace,即CSS后处理插件,于是顺便聊聊CSS postprocessors. 从Rework说起 Rework是TJ大神开发的CSS预处理框架.但为什么会出 ...
- Conway's Game of Life: An Exercise in WPF, MVVM and C#
This blog post was written for the Lockheed Martin Insight blog, sharing here for the external audie ...
- mahout分类学习和遇到的问题总结
这段时间学习Mahout有喜有悲.在这里首先感谢樊哲老师的指导.以下列出关于这次Mahout分类的学习和遇到的问题,还请大家多多提出建议:(全部文件操作都使用是在hdfs上边进行的). (本人用的环境 ...
- jenkins svn E175002错误
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dsvnkit.http.sslProtocols='SSLv3' -Dsvnkit.http ...
- 绘制n边形:用两个以上的控件来控制矩形的颜色、大小、位置及空实心(程序代写)
绘制n边形:用两个以上的控件来控制矩形的颜色.大小.位置及空实心.(n由键盘输入) package lzy.di9zhang; import java.awt.BorderLayout;import ...
- JS表单设置值
//表单设置值 $.fn.setForm = function(jsonValue) { var obj = this; $.each(jsonValue, function (name, ival) ...
- eclipse新建一个Android项目,就会报错android.support.v7.app.ActionBarActivity
解决方法: 今天被这个问题折腾了一下,最后终于找到了解决办法. 产生这个问题,是因为你升级了ADT到version 22,但是还需要升级SDK Tools,Platform Tools,Build T ...
- Maven3路程(三)用Maven创建第一个web项目(2)servlet演示
上一章用Maven新建了web项目成功后,本文演示在此基础上应用servlet. 1.首先修改pom.xml文件,添加servlet依赖 <project xmlns="http:// ...