struts2文件上传下载
首先建立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文件上传下载相关推荐
- struts2教程--实现文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- struts2教程(8)--文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- 【struts2】文件上传下载—struts2实现
struts2实现上传下载时要用到的jar包: UploadAction.java(fileupload.action) package com.rczp.action;import java.io. ...
- Struts2 文件上传,下载,删除
本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...
- struts2文件上传和下载
struts2已经有包装好的文件上传下载组件,非常方便.看源代码,红色标记的就是文件上传的拦截器 接下来我们再来看看这个拦截器的源码,下面标记的三个参数,仔细看注释, 但是配置文件并不包括配置画红线的 ...
- struts上传word和excel文件到oracle,Struts文件上传,下载,重传,预览
[Struts2]☆★之文件上传,下载,重传,预览 今日群里一兄弟问我能否给一份struts文件上传下载的例子,因为自己项目比较紧所以想在网上找 些源码给他,但是纵观全网,写的都不是太全,这让新手使用 ...
- 教你如何实现c#文件上传下载功能
简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- SpringMVC整合fastdfs-client-java实现web文件上传下载
为什么80%的码农都做不了架构师?>>> 版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...
最新文章
- Linux 下的格式化输出命令:print
- 卧虎藏龙2不显示服务器列表,《卧虎藏龙贰》iOS平台 合服公告(第2期)
- 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)
- transition css_Transition 过渡
- 【实习之T100开发】T100 Q查询开发流程
- 暖通中级工程师计算机考试题库,暖通工程师试题(含答案)
- ZOJ 3983 2017CCPC秦皇岛 C:Crusaders Quest
- libusb的使用教程和例子
- Bootstrap如何禁止响应式布局 不适配
- 51单片机循迹小车工作原理与程序设计思路
- Spring boot 与 Spring MVC
- 无人机——电池、电机、螺旋桨搭配
- 带有en的单词有哪些_en押韵的词语
- Spring统一日志处理(AOP)
- 纽约大学计算机与科学,NYU的Computer Science and Engineering「纽约大学计算机科学与工程系」...
- bluetooth baseband
- 基于AT89C51单片机的智能浇花系统设计
- 3D_systems_touch控制Dobot魔术师
- 升级K8S证书有效期为100年操作说明
- 自己开发的瓦片地图下载器,免费绿色
热门文章
- sqlserver 锁表语句以及解锁语句
- 解析中国电子学会:全国青少年软件编程(Scratch)一级2019考试试卷!
- 【面试】面(考)试(前)小(重)抄(点)_持续更新
- 软件测试工程师面试——假如要你测试 6 个月期限的 p2p 借款产品,你应该怎么设计案例,说出测试点
- 《CCNP SWITCH 300-115学习指南》——2.1节园区网结构
- 边缘计算企业20强榜单评选倒计时
- linux删除eth2设备_删除linux多余网卡
- 实测腾讯电脑管家纯净版:PC体验变革究竟需要解决哪些问题
- 精致的像素级别的风格转换 ----- Deep Image Analogy
- 合肥工业大学计算机考研录报比,2019合肥工业大学计算机考研初试科目、参考书目、报录比汇总...