今儿个咱来聊聊ServletFileUpload这玩意儿,这可是个在Java Web开发里头处理文件上传的老伙计。之前我做个小项目,需要用户上传图片,当时可把我给愁坏,后来还是靠它才搞定的,今天就来分享下我的实战经验。
准备工作
你得有这几个jar包:commons-fileupload 和 commons-io。这两个东西就像一对好兄弟,缺一不可。我当初就是忘加commons-io,结果折腾半天。
我记得我是直接从网上下载的zip包,解压后把里头的 (xxx代表版本号,我忘具体版本号)和 这两个文件,丢到我项目的 WEB-INF/lib 文件夹下。这步很重要,少它们,项目跑不起来!
实战过程
有这两个jar包,咱就可以开始写代码。我记得当时是这么干的:
- 在我的Servlet里头,我先判断下这个请求是不是上传文件的请求。因为用户可能提交各种各样的表单,咱得区分开来,只处理上传文件的请求,这里用的是
*(request)
来判断的。 - 如果确定是上传文件的请求,我就创建一个
ServletFileUpload
对象。这对象就像一个大管家,专门负责处理上传文件的各种事务。 - 然后,我还创建一个
DiskFileItemFactory
对象。这玩意儿的作用是设置一些上传的参数,比如文件大小限制、临时文件存放位置等等。我当时好像设置个文件大小上限,防止用户上传太大的文件,把服务器给撑爆。 - 我用"大管家"(就是
ServletFileUpload
对象)来解析这个请求。解析出来的结果是一个个的FileItem
对象。你可以把FileItem
想象成一个个小包裹,每个包裹里头可能装着一个表单字段,也可能装着一个上传的文件。 - 我遍历这些“小包裹”(
FileItem
),判断哪个是普通表单字段,哪个是文件。如果是文件,我就获取到它的文件名、文件内容,然后把它保存到服务器上的一个指定位置。如果是普通表单字段,我就获取它的值,做相应的处理。
我记得当时写完代码,一运行,还真成!浏览器里选择文件,一点上传,文件就乖乖地跑到服务器上。当时心里那个激动,感觉自己简直是个天才!
一点小坑
不过我也不是一帆风顺的。我记得当时遇到一个坑,就是文件名乱码的问题。上传的中文文件名,到服务器上就变成一堆看不懂的符号。后来我查资料,发现需要在解析请求之前,设置一下编码格式,用*("UTF-8")
,这个问题就解决。所以你们也要注意这个细节。
ServletFileUpload这玩意儿还是挺好用的,虽然现在有很多更先进的框架,但它依然是个经典。掌握它,处理文件上传就再也不是啥难事!
免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。