servletfileupload组件详解,看完这篇就懂了!

吉云

今儿个咱来聊聊ServletFileUpload这玩意儿,这可是个在Java Web开发里头处理文件上传的老伙计。之前我做个小项目,需要用户上传图片,当时可把我给愁坏,后来还是靠它才搞定的,今天就来分享下我的实战经验。

准备工作

你得有这几个jar包:commons-fileuploadcommons-io。这两个东西就像一对好兄弟,缺一不可。我当初就是忘加commons-io,结果折腾半天。

servletfileupload组件详解,看完这篇就懂了!

我记得我是直接从网上下载的zip包,解压后把里头的 (xxx代表版本号,我忘具体版本号)和 这两个文件,丢到我项目的 WEB-INF/lib 文件夹下。这步很重要,少它们,项目跑不起来!

实战过程

有这两个jar包,咱就可以开始写代码。我记得当时是这么干的:

  • 在我的Servlet里头,我先判断下这个请求是不是上传文件的请求。因为用户可能提交各种各样的表单,咱得区分开来,只处理上传文件的请求,这里用的是*(request)来判断的。
  • 如果确定是上传文件的请求,我就创建一个ServletFileUpload对象。这对象就像一个大管家,专门负责处理上传文件的各种事务。
  • servletfileupload组件详解,看完这篇就懂了!

  • 然后,我还创建一个DiskFileItemFactory对象。这玩意儿的作用是设置一些上传的参数,比如文件大小限制、临时文件存放位置等等。我当时好像设置个文件大小上限,防止用户上传太大的文件,把服务器给撑爆。
  • 我用"大管家"(就是ServletFileUpload对象)来解析这个请求。解析出来的结果是一个个的FileItem对象。你可以把FileItem想象成一个个小包裹,每个包裹里头可能装着一个表单字段,也可能装着一个上传的文件。
  • 我遍历这些“小包裹”(FileItem),判断哪个是普通表单字段,哪个是文件。如果是文件,我就获取到它的文件名、文件内容,然后把它保存到服务器上的一个指定位置。如果是普通表单字段,我就获取它的值,做相应的处理。

我记得当时写完代码,一运行,还真成!浏览器里选择文件,一点上传,文件就乖乖地跑到服务器上。当时心里那个激动,感觉自己简直是个天才!

一点小坑

servletfileupload组件详解,看完这篇就懂了!

不过我也不是一帆风顺的。我记得当时遇到一个坑,就是文件名乱码的问题。上传的中文文件名,到服务器上就变成一堆看不懂的符号。后来我查资料,发现需要在解析请求之前,设置一下编码格式,用*("UTF-8"),这个问题就解决。所以你们也要注意这个细节。

ServletFileUpload这玩意儿还是挺好用的,虽然现在有很多更先进的框架,但它依然是个经典。掌握它,处理文件上传就再也不是啥难事!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]