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