Struts2之Servlet文件上传详解

声明:此次讲解文件上传使用的FileUpload组件和IO组件,都是Apache官网最新版,FileUpload版本号:commons-fileupload-1.3.1-bin.zipIO版本号:commons-io-2.4-bin.zip。使用其他版本如有问题可以问我。

 

一、学习案例:本来这章是要讲解struts2的文件上传的,但是考虑我写博文的目的,是让大家从底层学习知识点,而struts2文件上传都是对servlet底层的一些封装,所以还是有必要讲解下servlet文件上传。

 

二、案例分析:实现文件上传所遵循的步骤:

a)DiskFileItemFactory(磁盘文件条目的工厂),通过文档,我们可以了解到它实现了FileItemFactory。我们首先生成其实例,并设置各种属性。

1、获取存放文件真实路径

String path = req.getRealPath("/upload");

2、设置临时文件存放路径

factory.setRepository(new File(path));

3、文件溢出大小为1024*1024才直接写向磁盘,此处配置既是防止直接写向磁盘文件溢出大小为1024*1024才直接写向磁盘,此处配置既是防止直接写向磁盘

factory.setSizeThreshold(1024 * 1024);

 

 

b)ServletFileUpload,通过文档我们可以发现它的构造方法需要一个FileItemFactory的一个实例。设置过后,我们就可以使用ServletFileUpload的各种方法。

 

c)ServletFileUpload一个重要的步骤就是解析请求。通过文档我们可以看到它有一个parseRequest(javax.servlet.http.HttpServletRequest request) throws FileUploadException,它返回的List泛型对象,每个就是一个FileItem对象。

 

d)FileItem(磁盘文件条目),我们就是通过它对请求对象进行处理

1、首先判断当前item是简单的表单文本域还是文件

isFormField()

2、文本域获取,因为form表单中指定了enctype=multipart/form-data,所以我们要通过FileItem提供的方法获取

String name = item.getFieldName();获取文本框名称

String value = item.getString();获取文本框输入值

3、文件名获取

String name = item.getFieldName();获取文本框名称

String value = item.getName();获取上传文件名

因为浏览器的不同,例如:Opera browser,会获取路径+文件名,所以我们要去除路径。

4、文件上传,我们可以通过FileItem的方法直接写出,也可通过IO流写入。

item.write(new File(path, fileName));

 

 

 

三、经验之谈:

a)Apache基金会,我不知道它对于其他语言的作用,但是对我们web,特别是jsp开发人员来讲,属于殿堂级的网站,里面有很多开源的插件,很是值得我们学习和利用。关于struts2的维护和升级文档都可以在上面看到。大家没事可以多溜达下。

b)不要背代码,要理清思路。比如:实现文件上传,我们只需要理解它的思路,就能很快实现出来。

 

四、参考项目:http://download.csdn.net/detail/u011638419/8211527

 

五、每日一乐:

当买电脑,手机等物品时,男人要配置,女人要样子。

但是每当是选对象的时候,这个规则就反过来了...

 

 

最终解释权归爱尚合伙人(www.23hhr.com)所有,转载请注明出处。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。