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. MVC 中如果js,css文件放到视图文件夹无法访问的解决办法

    在视图配置文件web.config 中添加如下节点,注意:此web.config 是视图文件夹中的,在你的views视图中可以找到<system.webServer>开头的<hand ...

  2. 【Codeforces 501C】Misha and Forest

    [链接] 我是链接,点我呀:) [题意] 给你一棵树 但是每个节点只告诉你出度个数 以及所有和它相连的点的异或和. 让你还原这棵树 [题解] 叶子节点的话,他所有节点的异或和就是它那唯一的一个爸爸 因 ...

  3. Linux学习总结(19)——Linux中文本编辑器vim特殊使用方法

    1. vim比对功能 在linux的环境下 用于观察两个文件的一致性的时候我们一般用diff这个命令来比对,但是这个命令不能你特别详细的比对出 具体的位置或者行对比.这里就用到了vim的对比功能 vi ...

  4. Tensorflow word2vec+manage experiments

    Lecture note 5: word2vec + manage experiments Word2vec Most of you are probably already familiar wit ...

  5. MySQL主从复制邮件报警脚本

    #!/bin/shexport PATH=$PATH:/application/mysql/3306/binlogFile=`date +"%Y-%m-%d %H:%M:%S"`_ ...

  6. AI小记-K近邻算法

    K近邻算法和其他机器学习模型比,有个特点:即非参数化的局部模型. 其他机器学习模型一般都是基于训练数据,得出一般性知识,这些知识的表现是一个全局性模型的结构和参数.模型你和好了后,不再依赖训练数据,直 ...

  7. DELPHI7加载UNICODE编码格式的TXT显示为乱码的解决方法

    DELPHI7的STRING默认是ANSI编码,加载UNICODE编码格式的TXT显示为乱码,解决方法如下: procedure TForm1.Button1Click(Sender: TObject ...

  8. 启动第二个Activity

    启动第二个Activity activity_main.xml文件: <? xml version="1.0" encoding="utf-8"?> ...

  9. SQL语句多表连接查询语法

    一.外连接 1.左连接  left join 或 left outer join SQL语句:select * from student left join score on student.Num= ...

  10. open_basedir restriction in effect,解决php引入文件权限问题 lnmp

    1.配置了虚拟域名 vim /usr/local/nginx/conf/vhost/siemens.conf server { listen 80; #listen [::]:80 default_s ...