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

首先,我们需要将之前注释的struts2框架引用取消注释。

在webroot下新建upload.jsp,在这里我使用struts2标签,同样在这个表单里,我们使用2个普通文本域和一个文件域。



表单将提交到upload这个Action。

为了防止干扰,首先我们注释掉所有的拦截器。

接下来重点是如何写这个Action。

表单中有3个字段,一个username,一个password和一个file。

username和password是String类型的,但是file该如何表示呢?

在struts2中,file的数据类型就是用File表示的,但是表示一个文件不仅仅需要用这个File对象,还需要2个String类型的对象,

分别表示文件名和文件类型,而且名字有固定的格式。

如上面的示例中:



如何得知怎么表示文件名和文件类型呢?

查看struts-core-2.1.8.jar,包org.apache.struts2.interceptor下的类FileUploadInterceptor。

在其intercept方法中会看到



在示例中,也就是指明另两个字段分别是file+"ContentType"和file+"FileName",即fileContentType和fileFileName。

然后产生上述5个字段的set和get方法。

然后需要写Action的execute方法,这个方法完成了文件上传的IO操作。

    

这个方法中的大部分操作和之前fileupload组件上传的类似。

有些区别的是,在Action中要想获得文件的真实路径,必须借助于ServletActionContext,这个可以获得Servlet的上下文,也就可以

获得Servlet中的一些属性和方法。

然后需要配置struts.xml


定义一个结果显示页面uploadresult.jsp,内容为:



这样就可以完成一个简单的上传了。

但是在控制台中看到如下输出:

    信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir

    信息: Removing file file D:/WEB/Tomcat 6.0/work/Catalina/localhost/struts2/upload_46423892_124e323eb54__8000_00000002.tmp
这是什么意思呢?

第一条是:无法找到'struts.multipart.saveDir'属性设置,默认为javax.servlet.context.tempdir的值。

前面已经提到,在文件上传中,当超过一定大小的文件首先会存到磁盘中,然后再写到目的地。而不是都存在内存中。

同样查看struts-core-2.1.8.jar,包org.apache.struts2下的default.properties,这个文件就定义了struts2中的很多的默认属性,其中struts.multipart.saveDir并没有定义任何值。

我们可以在struts.xml中进行定义。

在struts根目录下加入如下内容


这样就为struts.multipart.saveDir指定了一个值,即临时目录为C盘。

这样就不会出现之前的第一条提示了。

但是注意到,我们在上传含有中文名的文件时会出现乱码!

这个如何解决呢?

同样在default.properties中有个设置为struts.i18n.encoding=UTF-8

只要将这个值改为中文字符集就可以了。

这样就可以正常显示中文了。

在这个default.properties中定义了

struts.multipart.maxSize=2097152

即,默认允许上传当个文件最大值为2M,当然我们也可以修改这个值。

当然这仅仅只是上传了一个文件,也可以上传多个文件。

修改UploadAction,

  


重新生成set和get方法。

修改execute方法

 然后修改upload页面。

在这里,可以有两种情况,一种是固定文件数目的上传,一种是动态的文件数目。

1.首先看看简单的,固定文件数目的上传。

修改upload.jsp中的表单

 


注意<s:file>标签中的name要是一样的。

这样就可以上传固定数目的文件。

2.动态数目的文件上传。

这种动态性就是通过javascript来实现的,原理是对html进行DOM操作,实现动态地增加html标签。

首先新建upload2.jsp,将其theme设置为simple,然后使用表格对其布局。

 


然后的任务就是编写javascript代码,完成DOM操作

 


关于这方面知识请阅读有关javascript方面的书籍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值