之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用。至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API。

下面我们将详细介绍上传和下载的相关内容。
一、Struts文件上传机制
想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进制的形式被上传到服务器,至于该属性的其他值的作用及他们之间的区别,请查看之前文章:servlet3.0新特性。下面给出表现层页面代码:
<body> <s:form method="post" enctype="multipart/form-data" action="/upload"> <s:file name="ufile" label="浏览"/> <s:submit value="上传"/> </s:form> </body>
实际上在Struts的文件上传中,它使用三个Action属性来描述被上传的文件。commons-fileupload-1.3.2.jar和commons-io-2.2.jar这两个包就是用于辅助表单上传的内容赋值到action属性中,所以在使用Struts的文件上传之前应当先包含着两个包到项目中。下面给出upload对应的action:
public class UploadFile extends ActionSupport {
//封装的上传文件的文件内容
private File ufile;
//封装的上传文件的文件名
private String ufileFileName;
//封装的上传文件的文件类型
private String ufileContentType;
....省去getter,setter方法
public String execute() throws IOException {
FileInputStream fin = new FileInputStream(ufile);
FileOutputStream fos = new FileOutputStream("F:\\360\\"+ufileFileName);
byte[] buffer = new byte[1024];
int len;
while((len = fin.read(buffer))>0){
fos.write(buffer,0,len);
}
return SUCCESS;
}
}
先不看execute方法,在该action中,我们可以看到有三个属性。ufile封装了上传的文件的二进制内容,ufileFileName(xxxFileName)封装了该文件的文件名,ufileContentType(xxxContentType)封装了该文件的类型。他们的值是我们不必关心的,框架会根据表单上传的文件对他们进行赋值,只需要遵守他的命名规则即可。
execute方法主要是完成将上传的文件保存到硬盘上,代码也比较简单,读取属性ufile中的内容,写入磁盘指定位置。下面我们看看运行的结果截图:
至此我们就完成了对上传文件的获取保存,总体上看来,实际上还是使用了三个action实例属性对上传文件相关信息的封装。一个属性封装的是该上传文件的二进制内容,一个属性封装该文件的文件名称,一个属性封装的是该文件的文件类型。实际上把控好这三个属性,基本可以完成对该上传文件的所有操作。下面我们看文件下载。
二、Struts文件下载机制
广义上的文件下载,其实可以使用a标签链接到对应资源完成对资源的下载,但是在浏览器中使用这种方式会导致浏览器直接打开该资源文件而非弹出下载框指定下载位置。Struts下载机制通过配置result元素的type属性为stream来实现的。在类型为stream的result元素中可以配置一些参数,这些参数主要有以下一些:
contentType:指定被下载文件的文件类型
inputName:指定被下载文件的输入流入口
contentDisposition:指定下载文件的文件名
bufferSize:指定下载文件的缓冲大小
具体的应用我们从代码示例中体会:
//直接访问的action
<body>
<a href="/download" rel="external nofollow" >下载资源</a>
</body>
public class DownloadFile extends ActionSupport {
private String inputPath;
public void setInputPath(String s){
this.inputPath = s;
}
public String getInputPath(){
return this.inputPath;
}
public InputStream getTarFile(){
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
@Override
public String execute(){
return SUCCESS;
}
}
//download的action配置
<action name="download" class="MyPackage.DownloadFile">
<param name="inputPath">/m.jpg</param>
<result type="stream">
<param name="inputName">tarFile</param>
<param name="contentType">image/jpg</param>
<param name="contentDisposition">attachment;filename="walker.jpg"</param>
</result>
</action>
首先解析下Struts.xml中有关action的配置代码,第一个param元素为action中的属性inputPath动态赋值,该参数的值指定了将要被下载的文件资源位置,我们此处指定的web应用根目录下的一张图片。
接下来就是配置的结果类型result,该元素的默认type属性为dispather表示分发的意思,而我们此处的stream表示流的意思,它将返回给浏览器一个InputStream(被下载文件的入口)。其中它配置了inputName,该参数的值对应于action中getXXXX方法,当接受到请求的时候,框架会通过该参数匹配调用action中的getXXXX方法,该方法会根据指定资源路径返回该文件的入口InputStream,交给浏览器。
我们也看到contentType参数指定了该文件的类型,和互联网MIME标准中的规定类型一致,例如:text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片等。
contentDisposition参数表示被下载文件在保存时候的文件名,它有两个属性值。第一个属性值可以是inline或者attachment,它指定浏览器是直接打开还是下载,filename指定了下载或者打开文件的名称。下面看上述代码的运行结果截图:
至此,有关Struts控制文件的上传和下载的相关内容已经简单介绍完了,有些核心的,深层次的内容涉及到拦截器,所以当我们介绍完拦截器之后,想必大家会有更加深刻的理解。
以上所述是小编给大家介绍的Struts2 控制文件上传下载功能实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# struts2文件上传下载
# struts2文件上传
# JSP开发之Struts2实现下载功能的实例
# struts2实现文件下载功能
# java中Struts2 的文件上传和下载示例
# Struts2实现文件下载功能代码分享(文件名中文转码)
# java中struts2实现简单的文件上传与下载
# java中struts2实现文件上传下载功能
# JavaWeb中struts2实现文件上传下载功能实例解析
# JavaEE中struts2实现文件上传下载功能实例解析
# java中struts2实现文件上传下载功能实例解析
# struts2实现简单文件下载功能
# 上传
# 上传文件
# 该文件
# 文件上传
# 的是
# 表单
# 装了
# 相关内容
# 第一个
# 来实现
# 小编
# 新特性
# 他们的
# 互联网
# 是在
# 会有
# 拦截器
# 在此
# 这两个
# 给大家
相关文章:
公司网站制作需要多少钱,找人做公司网站需要多少钱?
jQuery 常见小例汇总
如何在万网ECS上快速搭建专属网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
三星网站视频制作教程下载,三星w23网页如何全屏?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
网站制作需要会哪些技术,建立一个网站要花费多少?
如何快速生成橙子建站落地页链接?
如何通过PHP快速构建高效问答网站功能?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
c# 在高并发场景下,委托和接口调用的性能对比
建站主机是否属于云主机类型?
如何通过cPanel快速搭建网站?
如何选择高效稳定的ISP建站解决方案?
建站之星如何保障用户数据免受黑客入侵?
如何在橙子建站上传落地页?操作指南详解
如何快速搭建支持数据库操作的智能建站平台?
如何登录建站主机?访问步骤全解析
建站主机是否等同于虚拟主机?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
家具网站制作软件,家具厂怎么跑业务?
如何在宝塔面板创建新站点?
如何在阿里云虚拟主机上快速搭建个人网站?
如何在景安服务器上快速搭建个人网站?
个人网站制作流程图片大全,个人网站如何注销?
西安大型网站制作公司,西安招聘网站最好的是哪个?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何设置并定期更换建站之星安全管理员密码?
如何选择PHP开源工具快速搭建网站?
建站之星代理如何优化在线客服效率?
如何注册花生壳免费域名并搭建个人网站?
南京网站制作费用,南京远驱官方网站?
如何快速搭建安全的FTP站点?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
广州美橙建站如何快速搭建多端合一网站?
如何配置IIS站点权限与局域网访问?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何零成本快速生成个人自助网站?
建站为何优先选择香港服务器?
c# await 一个已经完成的Task会发生什么
如何用VPS主机快速搭建个人网站?
建站之星导航配置指南:自助建站与SEO优化全解析
免费ppt制作网站,有没有值得推荐的免费PPT网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
完全自定义免费建站平台:主题模板在线生成一站式服务
如何在阿里云部署织梦网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。