之前介绍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实现简单文件下载功能
# 上传
# 上传文件
# 该文件
# 文件上传
# 的是
# 表单
# 装了
# 相关内容
# 第一个
# 来实现
# 小编
# 新特性
# 他们的
# 互联网
# 是在
# 会有
# 拦截器
# 在此
# 这两个
# 给大家
相关文章:
如何自定义建站之星模板颜色并下载新样式?
建站主机选虚拟主机还是云服务器更好?
建站主机选购指南:核心配置与性价比推荐解析
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
如何配置WinSCP新建站点的密钥验证步骤?
怎么将XML数据可视化 D3.js加载XML
高端云建站费用究竟需要多少预算?
如何在万网开始建站?分步指南解析
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
制作企业网站建设方案,怎样建设一个公司网站?
如何高效利用亚马逊云主机搭建企业网站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
建站之星展会模版如何一键下载生成?
Android滚轮选择时间控件使用详解
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何在阿里云高效完成企业建站全流程?
如何高效配置IIS服务器搭建网站?
招商网站制作流程,网站招商广告语?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
香港服务器租用每月最低只需15元?
深圳网站制作案例,网页的相关名词有哪些?
魔方云NAT建站如何实现端口转发?
创业网站制作流程,创业网站可靠吗?
制作农业网站的软件,比较好的农业网站推荐一下?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
定制建站是什么?如何实现个性化需求?
如何在万网自助建站中设置域名及备案?
如何高效完成自助建站业务培训?
北京专业网站制作设计师招聘,北京白云观官方网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
如何在IIS7中新建站点?详细步骤解析
如何快速生成可下载的建站源码工具?
音响网站制作视频教程,隆霸音响官方网站?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何在服务器上三步完成建站并提升流量?
如何快速完成中国万网建站详细流程?
建站之星后台密码遗忘?如何快速找回?
在线制作视频的网站有哪些,电脑如何制作视频短片?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
网站app免费制作软件,能免费看各大网站视频的手机app?
如何登录建站主机?访问步骤全解析
开封网站制作公司,网络用语开封是什么意思?
建站主机SSH密钥生成步骤及常见问题解答?
Android自定义控件实现温度旋转按钮效果
小型网站制作HTML,*游戏网站怎么搭建?
建站之星如何优化SEO以实现高效排名?
建站之星后台密码如何安全设置与找回?
为什么Go需要go mod文件_Go go mod文件作用说明
*请认真填写需求信息,我们会在24小时内与您取得联系。