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

1.    上传实例

2.     步骤一:upload.jsp代码如下:
<s:form action="upload"method="post" enctype="multipart/form-data">

<s:file name="file"label="上传的头像(格式:jpg,gif,bmp)"></s:file>

<s:submitvalue="上传"/>         <s:reset value="取消"/>

</s:form>
注意:在form标签中我们用到了enctype实体,这是上传时必须用到得。
步骤二,建立struts.xml。对upload.action的配置如下:
<action name="upload"class="com.asm.UploadAction">

<param name="savePath">img</param>

<result>/upSuc.jsp</result>

<result name="input">upload.jsp</result>

<interceptor-refname="defaultStack">

<param name="fileUpload.maximumSize">1024*1024</param>

<param name="fileUpload.allowedTypes">
image/bmp,image/pjpeg,image/gif

</param>

</interceptor-ref>

</action>

在这里唯一需要说明的是<interceptor-ref>下的参数问题,在以前如果要为某个特定的拦截器传递参数需要在<interceptor>下配置pararm参数,在此处我们用.形式来配置fileUpload拦截器的参数。这用做即可以保证默认的拦截器栈起作用,也可以向fileUpload拦截器传递参数。第一个参数是限制上传图片的大小(除了可以这样限制图片大小,也可以配置一个常量的方法来限制上传文件的大小,配置的内容为:<constantname="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 classUploadAction extendsActionSupport {

private String savePath;

private File file;

private String fileFileName;

private String fileContentType;

public Stringexecute() throws Exception {

String path=ServletActionContext.getServletContext().getRealPath(savePath);

String savaFileName=path+"\\"+fileFileName;

//System.out.println(savaFileName);

BufferedInputStream bis=null;

BufferedOutputStream bos=null;

try{

bis=newBufferedInputStream(newFileInputStream(file));

bos=newBufferedOutputStream(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(Exceptione){

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的主要内容如下:
<body>

<h4>上传成功,以下是你刚上传的图片:</h4>
<img src="<%=request.getContextPath()%>/<s:property value="savePath+'/'+fileFileName"/>"> <br>

保存路径为:<s:propertyvalue="savePath+'/'+fileFileName"/>

</body>

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

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

2.下载实例

下载页面的doload.jsp的主要代码如下:
<a href="download.action?downloadName=img/a.bmp">下载图片</a><br>

<a href="download.action?downloadName=img/music.rar">下载千千静听</a><br>
对应的download action配置如下:

<action name="download"class="com.asm.DownloadAction">

<result name="success"type="stream">

<param name="inputName">targetFile</param>
                     <param name="contentType">
              image/bmp,application/x-zip-compressed
            </param>

</result>

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

DownloadAction的主要代码如下:
package com.asm;

public classDownloadAction extendsActionSupport {

private String downloadName;

public Stringexecute() throws Exception {

return SUCCESS;

}

public InputStream getTargetFile(){

returnServletActionContext.getServletContext().getResourceAsStream(downloadName);

}

public voidsetDownloadName(String downloadName) {

this.downloadName =downloadName;

}

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

struts2文件上传下载相关推荐

  1. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  2. struts2教程(8)--文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  3. 【struts2】文件上传下载—struts2实现

    struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...

  4. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  5. struts2文件上传和下载

    struts2已经有包装好的文件上传下载组件,非常方便.看源代码,红色标记的就是文件上传的拦截器 接下来我们再来看看这个拦截器的源码,下面标记的三个参数,仔细看注释, 但是配置文件并不包括配置画红线的 ...

  6. struts上传word和excel文件到oracle,Struts文件上传,下载,重传,预览

    [Struts2]☆★之文件上传,下载,重传,预览 今日群里一兄弟问我能否给一份struts文件上传下载的例子,因为自己项目比较紧所以想在网上找 些源码给他,但是纵观全网,写的都不是太全,这让新手使用 ...

  7. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  8. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  9. SpringMVC整合fastdfs-client-java实现web文件上传下载

    为什么80%的码农都做不了架构师?>>>    版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...

最新文章

  1. Linux 下的格式化输出命令:print
  2. 卧虎藏龙2不显示服务器列表,《卧虎藏龙贰》iOS平台 合服公告(第2期)
  3. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)
  4. transition css_Transition 过渡
  5. 【实习之T100开发】T100 Q查询开发流程
  6. 暖通中级工程师计算机考试题库,暖通工程师试题(含答案)
  7. ZOJ 3983 2017CCPC秦皇岛 C:Crusaders Quest
  8. libusb的使用教程和例子
  9. Bootstrap如何禁止响应式布局 不适配
  10. 51单片机循迹小车工作原理与程序设计思路
  11. Spring boot 与 Spring MVC
  12. 无人机——电池、电机、螺旋桨搭配
  13. 带有en的单词有哪些_en押韵的词语
  14. Spring统一日志处理(AOP)
  15. 纽约大学计算机与科学,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」...
  16. bluetooth baseband
  17. 基于AT89C51单片机的智能浇花系统设计
  18. 3D_systems_touch控制Dobot魔术师
  19. 升级K8S证书有效期为100年操作说明
  20. 自己开发的瓦片地图下载器,免费绿色

热门文章

  1. sqlserver 锁表语句以及解锁语句
  2. 解析中国电子学会:全国青少年软件编程(Scratch)一级2019考试试卷!
  3. 【面试】面(考)试(前)小(重)抄(点)_持续更新
  4. 软件测试工程师面试——假如要你测试 6 个月期限的 p2p 借款产品,你应该怎么设计案例,说出测试点
  5. 《CCNP SWITCH 300-115学习指南》——2.1节园区网结构
  6. 边缘计算企业20强榜单评选倒计时
  7. linux删除eth2设备_删除linux多余网卡
  8. 实测腾讯电脑管家纯净版:PC体验变革究竟需要解决哪些问题
  9. 精致的像素级别的风格转换 ----- Deep Image Analogy
  10. 合肥工业大学计算机考研录报比,2019合肥工业大学计算机考研初试科目、参考书目、报录比汇总...