博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2.1.6教程九、文件上传下载(了解)
阅读量:7240 次
发布时间:2019-06-29

本文共 3441 字,大约阅读时间需要 11 分钟。

首先建立struts2UpDownLoad项目,搭建好struts2基本的开发环境。

  1. 上传实例

步骤一:upload.jsp代码如下:

注意:在form标签中我们用到了enctype实体,这是上传时必须用到得。

步骤二,建立struts.xml。对upload.action的配置如下:

img
/upSuc.jsp
upload.jsp
1024*1024
image/bmp,image/pjpeg,image/gif

 

在这里唯一需要说明的是<interceptor-ref>下的参数问题,在以前如果要为某个特定的拦截器传递参数需要在<interceptor>下配置pararm参数,在此处我们用.形式来配置fileUpload拦截器的参数。这用做即可以保证默认的拦截器栈起作用,也可以向fileUpload拦截器传递参数。第一个参数是限制上传图片的大小(除了可以这样限制图片大小,也可以配置一个常量的方法来限制上传文件的大小,配置的内容为:<constant name="struts.multipart.maxSize" value="文件大小"/>),第二个参数是限制上传图片的格式只能为bmp,pjpeg,gif关于这些参数可以参看fileupload拦截器对应类的api文档。

另还需注意:在action下的“<param name="savePath">img</param>”代码可以为UploadAction的savePath字段传递值,这样作的好处是在项目正式发布后,我们可以通过修改struts.xml中的配置来灵活给savePath赋值。而如果直接在java源代码中初始化savePath的值,在项目运行后就不能简单修改。这种用法主要是为了给客户提供一个灵活可配的特定初始化方式。

步骤三、编写UploadAction,主要代码如下:

package com.asm;public class UploadAction extends ActionSupport {    private String savePath;    private File file;    private String fileFileName;    private String fileContentType;    public String execute() throws Exception {        String path=ServletActionContext.getServletContext().getRealPath(savePath);        String savaFileName=path+"\\"+fileFileName;        //System.out.println(savaFileName);                 BufferedInputStream bis=null;        BufferedOutputStream bos=null;        try{        bis=new BufferedInputStream(new FileInputStream(file));        bos=new BufferedOutputStream(new FileOutputStream(savaFileName));                byte []buf=new byte[(int) file.length()];        int len=0;        while((len=bis.read(buf))!=-1){            bos.write(buf,0,len);        }}catch(Exception e){            e.printStackTrace();        }finally{            if(bis!=null)                bis.close();            if(bos!=null)                bos.close();        }        return SUCCESS;    }    ...省略以上四个字段的get/set方法}

说明:其实上传的难点就是在此action的处理上。首先是从配置文件中读取文件的保存路径,然后联合fileFileName(命名规则是上传的文件对应的字段名+FileName,如果要得到上传文件的类型,固定的写法应是上传的文件对应的字段名+ContentType,比如这里应为fileContentType)来确定完整的保存路径,并最终为创建BufferedOutputStream作准备。BufferedInputStream是通过前台upload.jsp页面传递的file构建。特别要注意处理流,如果书写不当可能会使上传文件循环写入,使得硬盘容量不够。还要注意对流的关闭问题。 补充:关于文件的操作可以使用commons-io.jar包的FileUtils类下的copyFile方法来进行文件的拷贝,比如这里调用copyFile方法(file,要保存的目录)

上传成功后,upSuc.jsp的主要内容如下:

上传成功,以下是你刚上传的图片:

">
保存路径为:

 

说明:当上传成功后,会显示上传的图片。

扩展实例:如果想上传多个文件,可以在Action中使用File[] files来接受上传的文件(jsp中对应的上传文件的参数均应为files)。对应的上传文件的名字,使用String[] fileFileName。然后循环files数组保存File文件对象。

 

2.下载实例

下载页面的doload.jsp的主要代码如下:

对应的download action配置如下:

targetFile
image/bmp,application/x-zip-compressed

说明:type类型指明了结果集为流类型,并且为流类型结果集配置了参数,inputName指定流的来源,这里来源为targetFile,所以在下面的Action中有getTargetFile方法, contentType指明下载时的文件类型。

DownloadAction的主要代码如下:

package com.asm;public class DownloadAction extends ActionSupport {    private String downloadName;    public String execute() throws Exception {        return SUCCESS;    }public InputStream getTargetFile(){    return ServletActionContext.getServletContext().getResourceAsStream(downloadName);    }    public void setDownloadName(String downloadName) {        this.downloadName = downloadName;    }}

说明:下载实例在此略作了解,具体可以借助apache组织提供的上传下载开源项目理解。

 

转载地址:http://sjybm.baihongyu.com/

你可能感兴趣的文章
mysql数据库授权
查看>>
Microstation
查看>>
深入浅出的英语口语700句zz
查看>>
linux编译安装php
查看>>
再谈奶牛问题
查看>>
第一个java程序------hello world!
查看>>
C#学习安排表
查看>>
在LINUX上创建GIT服务器【转】
查看>>
Linux内核跟踪之trace框架分析【转】
查看>>
XCode v9.6.2017.0830
查看>>
ES不设置副本是非常脆弱的,整个文章告诉了你为什么
查看>>
设置nmon 每天自动收集性能信息
查看>>
python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】...
查看>>
JVM的内存分配与垃圾回收策略
查看>>
分布式设计与开发(二)------几种必须了解的分布式算法
查看>>
IT高管和易筋经的故事
查看>>
ASP.NET 2.0新控件、管理外观、布局及其它用户体验
查看>>
Javascript分号,加还是不加?
查看>>
[Ubuntu Setup] Ubuntu 14.10 LTS 中文输入法的安装
查看>>
Selenium获取当前窗口句柄与切换回原窗口句柄
查看>>