struts2 之Servlet文件上传详解

声明:此次讲解文件上传使用的FileUpload组件和IO组件,都是Apache官网最新版,FileUpload版本号:commons-fileupload-1.3.1-bin.zip,IO版本号: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));

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/u011638419/article/details/41642773

posted @ 2024-12-20 16:56  不会游泳的鱼~~  阅读(19)  评论(0编辑  收藏  举报