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 之 实现文件上传(多文件)和下载的更多相关文章

  1. struts2文件上传,文件类型 allowedTypes

    struts2文件上传,文件类型 allowedTypes 1 '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript ...

  2. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  3. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  4. webAPI文件上传时文件过大404错误的问题

    背景:最近公司有个需求,外网希望自动保存数据到内网,内网有2台服务器可以相互访问,其中一台服务器外网可以访问,于是想在 这台服务器上放个中转的接口.后来做出来以后测试发现没有问题就放线上去了,不顾发现 ...

  5. JavaWeb多文件上传及zip打包下载

    项目中经常会使用到文件上传及下载的功能.本篇文章总结场景在JavaWeb环境下,多文件上传及批量打包下载功能,包括前台及后台部分.  首先明确一点:  无法通过页面的无刷新ajax请求,直接发下载.上 ...

  6. struts2实现文件上传(多文件上传)及下载

    一.要实现文件上传,需在项目中添加两个jar文件 二.上传准备的页面 注:必须植入enctype="multipart/form-data"属性,以及提交方式要设置成post &l ...

  7. Struts2 单个文件上传/多文件上传

    1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...

  8. Struts2文件上传--多文件上传(插件uploadify)

    公司需要把以前的Struts2自带的图片上传替换掉,因为不能一个file选择多个文件,本人直接百度搜索图片插件,  貌似就它(uploadify3.2.1)在最前面,也找过很多案例, 其中有不少问题, ...

  9. Struts2之文件上传(单文件/多文件)

    <一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...

  10. 文件上传命令rz和下载命令sz的安装

    上一节中,我们已经搭建好了linux环境,现在我们开始使用xshell工具,连接虚拟机. 一.xshell工具简介 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Mic ...

随机推荐

  1. idea 类图显示

    不得不说idea java开发的神器啊,免去了自己画图的很多工作量. 打开类图快捷键:Ctrl+Alt+Shift+U

  2. 【Codeforces 264B】Good Sequences

    [链接] 我是链接,点我呀:) [题意] 让你在一个递增数组中选择一个最长子序列使得gcd(a[i],a[i+1])>1 [题解] 设f[i]表示以一个"含有素因子i的数字" ...

  3. Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)--------hadoop环境的搭建

    Linux上安装Hadoop集群(CentOS7+hadoop-2.8.0)------https://blog.csdn.net/pucao_cug/article/details/71698903 ...

  4. BNUOJ 2528 Mayor's posters

    Mayor's posters Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Origin ...

  5. Uva10562

    Professor Homer has been reported missing. We suspect that his recent research works might have had ...

  6. 轰炸III

    题目背景 一个大小为N*M的城市遭到了X次轰炸,每次都炸了一个每条边都与边界平行的矩形. 题目描述 在轰炸后,有Y个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮. ...

  7. Ubuntu安装vnc 解决乱码

    https://blog.csdn.net/dddxxxx/article/details/53580789 https://www.centos.bz/2017/12/%E8%A7%A3%E5%86 ...

  8. Maven使用GitHub项目目录搭建远程仓库

    使用GtiHub的项目目录搭建第三方远程仓库,能免除使用服务器搭建Nexus私服,而且空间也是免费的.但是这种方式只适合小规模发布,毕竟搜索和版本控制是一个问题,如果需要更复杂的功能就只能转向Nexu ...

  9. JAVA实现RSA加密解密 非对称算法

    首先RSA是一个非对称的加密算法.所以在使用该算法加密解密之前,必须先行生成密钥对.包含公钥和私钥 JDK中提供了生成密钥对的类KeyPairGenerator,实比例如以下: public stat ...

  10. centos命令行安装mysql随机密码查看方法(遇到问题及其解决办法)

    mysql初次命令行安装登录时报错: 未输入密码:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwo ...