struts2学习笔记(12)——文件上传与下载(2)

限制上传文件类型

这是通过使用拦截器实现的。查看fileuploadinterceptor类,可以看到

protected Set<String> allowedTypesSet = Collections.emptySet();

这个集合就代表着允许上传的文件类型。

虽然在defaultStack已经配置了fileupload拦截器,但是要自己指定参数,因此在action配置中还需配置fileupload拦截器和默认拦截器。

不能只是配置fileupload拦截器,前面已经说过当action中配置有其他拦截器时,默认拦截器不会自动加上,而是要显式的声明一下。

修改struts.xml中的action定义

 



这样就设置了一个拦截器,它将上传的文件限制为PPT,大小为400K,其中maximumSize单位为b,指单个文件限制。

注意allowedTypes定义的必须是文件的MIME类型,而不是文件扩展名。

MIME类型可以在Tomcat的web.xml文件中找到。

但是上传回到原来的页面时并没有显示出出错信息。这是由于这个错误是fielderror级别的,在upload2.jsp中无法显示这一级别的错误。

增加内容



这样就可以显示出struts2自定义的错误,显然这是无法被用户接受的,因此要自定义错误消息,这在前面的课程中已经讲过了。

查看struts-core-2.1.8.jar,包org.apache.struts2下的struts-messages.properties,这里面定义了相关的内容。

struts.messages.error.file.too.large=File too large: {0} "{1}" "{2}" {3}

struts.messages.error.content.type.not.allowed=Content-Type not allowed: {0} "{1}" "{2}" {3}

覆盖这两处设置即可。

在message.properties文件中,添加如下内容

struts.messages.error.content.type.not.allowed=/u4e0a/u4f20/u6587/u4ef6/u7c7b/u578b/u4e0d/u5141/u8bb8/uff0c/u8bf7/u91cd/u8bd5/uff01

struts.messages.error.file.too.large=/u4e0a/u4f20/u6587/u4ef6/u8fc7/u5927/uff0c/u8bf7/u91cd/u8bd5/uff01

注意在properties文件中不允许出现中文,因此需要用native2ascii这个工具进行转换,上述输出据结果分别为

“上传文件类型不允许,请重试!”和“上传文件过大,请重试!”

文件下载

进行文件下载前,先看看struts-default.xml中关于结果类型的定义,其中有个stream类型,这个就是和文件下载相关的。

查看其实现类StreamResult

查看其字段

 



这是根据HTTP协议得来的,在此,我们只需要设定contentType,contentDisposition,inputName和inputStream即可

新建download.jsp,内容为

   



这个超链接将转向DownloadAction。

新建DownloadAction

要进行文件下载,最重要的是设置输入流,即配置inputStream这个属性。

为此需要在Action中写一个方法,返回InputStream。

DownloadAction

 

 

 

在struts.xml中的配置为

 

 

其中resut的type为stream,contentType同样也是MIME类型,contentDisposition的值为filename=XXX,这样下载时文件名就为这里所设置的值了。

inputName的值为Action中返回的InputStream的那个方法名,不包含get。

这样就可以完成struts2中的文件下载了。

当然在文件下载前进行权限控制等等。

下次课将学习struts2国际化。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值