当前位置:首页 > java知识学习_java技术文章 > 正文

diskfileupload常用api方法解析与过时替代方案

浏览189+

一、diskfileupload组件介绍

diskfileupload是一个用来在Java项目中做文件上传下载的核心组件儿,该组件是Apache项目组织开源出来的非常强大的用于文件上传功能的核心工具类组件。

程序后台人员直接引入这个组件的jar文件后直接调用其相应的文件上传的api就可以简单快速的完成文件的上传,非常高效便捷广受众多Java后台程序员的喜爱。

该diskfileupload组件儿位于Apache下的Commons fileupload包下,大家引入jar文件、maven依赖和导包时,一定要看清楚报名的位置所在。

diskfileupload类底层专门针对的是java的servlet和web项目,这使得该类与servlet完美融合,使其上传的效率大大的提升。

文件上传界面展示

上传文件时只需要在web页面的form表单提交请求为POST请求以及content type为multipart/form-data类型,前端页面只需要设置这两个地方,后台就可以应用该类捕获到该请求完成文件上传的功能。

二、重点与常用api方法解析

1)构造方法

由于所有的文件上传所用的对象都是该diskfileupload组件创建的对象,因此首先要介绍该类对象创建的方法也就是构造方法,这个方法是一个无参构造函数,我们直接按照以下带码直接new出对象:

DiskFileUpload diskFileUpload = new DiskFileUpload();

2)set类属性设置方法解析

set类方法汇总一览图

上图中是列举出的该diskfileupload类四个常用的set开头的属性设置的方法,第一个方法名叫.setSizeMax()方法,从字面意思看,该方法是设置的消息实体内容的最大值。

该方法的用意是防止用户在前端故意上传大文件来破坏我们服务后端程序的正常运行而导致后端程序异常或者是文件塞满了后端内存空间,其参数值就是设置到最大的字节数,如果上传的文件超过了该参数的设置值将会抛出FileUploadException异常信息,然后终止上传。

第二个方法叫.setHeaderEncoding()方法,是一个设置请求头头部信息编码的方法,假设我们的表单中设置的编码字符集与后台程序的编码不一致就会出现乱码的情况,因此该方法的出现是为了解决文件上传时显示的乱码问题。

表单中用户输入的内容以及文件的url路径在后台程序中都是以编码的形式进行表示,因此Apache组织需要将上传的文件解析成编码字符集的表示形式,故我们必须要设置好正确的编码格式,这样才能Apache以正确的编码格式进行解析,这样才不会出错。

第三个方法名叫.repositoryPath()方法,该方法是为了设置文件的存储路径,意思就是我们在上传文件时将上传的文件存到哪一个文件夹下,路径就是由该方法指定的,该方法要求路径必须是绝对路径不能采用相对路径,这是明文规定的要求,如果我们不设置该路径的话,文件的存储就会按照jvm所指定的默认文件夹存储,这样寻找的时候极其不方便,因此建议设置该方法的路径参数。

最后一个方法名字.setSizeThreshold()方法,该方法的意思是设置一个固定的字节数的临界值,该值得参数由程序开发者自己设置,设置该值的用意就是如果上传的文件大小小于该值的话,那该类就会直接将文件上传到程序内存中,如果上传的文件大于临界值的话,diskfileupload就会自动将该文件存储到自己的临时文件夹中,因为JVM能够使用的默认内存空间是比较小的,像我们再传大文件的时候是无法一次性上传的,因此才会有了该方法的设定。

3)解析表单数据的方法

解析表单的方法汇总一览图

上图中的第一个方法名叫.parseRequest()方法,该方法属于diskfileupload最核心的一个方法,主要是用来处理文件上传的请求解析出前端传过来的form表单中的数据,将表单中每个字段的数据封装成FileItem对象,然后将这些对象存储到List集合中返回出去。

值得注意的是该方法需要判断消息实体中的内容类型,如果该类型不是multipart/form-data,那么就会抛出异常,该异常名就是上文提到的FileUploadException异常。

第二个方法是一个静态方法,它的名字叫.isMultipartContent(),这是一个判断方法,判断正确则返回true,判断错误则返回false,主要就是判断请求消息中的内容类型是否是multipart/form-data类型。

该方法一般不怎么常用,我们在程序中也可以使用该方法做判断使用,手动捕获异常时也可以用。

三、diskfileupload过时替代方案

diskfileupload中的方法已经被标记为了过时,其意思时不太建议程序员们使用该方法了,只是不建议使用,但是我们如果没有更好的替代方案的话偶尔还是可以用的,只不过是会有相应的隐患产生的可能。

在这里我们介绍一种同样是文件上传的替代方案来替代该方法,在Java的应用文档中,明确提到了两个类可以替换掉过时的这个文件上传类,这两个例子名字叫ServletFileUpload类,另一个叫DiskFileItemFactory,具体的替代代码编写详见下图:

两个替代类文件上传的详细代码一览图

四、中文乱码解决办法

上面我们的讲解diskfileupload类中详细的属性设置的方法是提到了一句可以解决乱码的那个.setHeaderEncoding()方法,该方法就是解决中文乱码的唯一的解决方案。

我们需要设置表单解析的编码与后台程序的编码一致,一般都应该设置为utf-8,解决乱码的主要代码见下图红色标注的地方。

中文乱码解决代码以及文件上传的详细完整代码

上图中,红色标注的地方就是设置编码及解决中文乱码的代码,后面剩余的代码就是一个完整的文件上传的案例代码,大家在做文件上传的时候可以参考这个案例编写自己的业务代码。

实际上解决中文乱码在项目中并不一定都会这么使用,因为这样使用需要在每一个请求方法中都加一句上文中标注的解决乱码的代码,这样实在是太繁琐了。

在SSM框架中,通常的解决方案就是在web.xml中配置一个过滤字符集编码的过滤器,统一拦截任何请求,然后将请求设置为与后台编码一致的编码格式,这样的话只需要设置一次即可应用在整个项目中是最完整的解决方案。

 

责任声明:文章信息由IT教程屋小编精心整理总结编排而成,倾注了心血和汗水,转载时请遵循行业规范务必注明文章作者、来源及本页链接,谢谢合作!
本篇文章标题:diskfileupload常用api方法解析与过时替代方案
本篇文章url地址:http://www.itjcw123.cn/2960.html