一、实现思路
《1》首先需要在需要的页面添加一个文件上传的组件,type="file"标识这是一个文件上传组件, name属性,暂时先写上 <input type="file" name="upload"></input>
《2》如果用form表单提交的方式实现上传,需要在<form>标签内加上属性
enctype="multipart/form-data" 这个属性是实现文件上传的必须属性
《3》万事俱备,第三步开始在后台servlet书写上传逻辑
《4》需要注意一点,一旦使用第二步的属性,后台获取表单参数就不能用request.getParameter
二、后台实现
先上截图,再来逐条分析
![](https://img.haomeiwen.com/i15828902/87d44d77d861881d.png)
![](https://img.haomeiwen.com/i15828902/1ac374a60cab35f2.png)
《1》boolean isMultipart = ServletFileUpload.isMultipartContent(request);这句话不是必须的,为了严禁 目的:判断form是否为支持上传的类型
《2》if(isMultipart){}、if条件判断,如果为true,则证明是支持的,在if内部编写业务逻辑
《3》DiskFileItemFactory factory = new DiskFileItemFactory();利用提供的API“设置一个工厂类”
《4》ServletFileUpload upload = new ServletFileUpload(factory);创建上传对象(固定写法)
《5》upload.setHeaderEncoding("utf-8");upload.setSizeMax(1024*1024*2);这两句话目的是给上传的文件添加限制条件,编码格式和最大上传容量
《6》接下来就可以进行请求对象的解析List<FileItem> fileItem = upload.parseRequest(request);
返回的是一个FileItem类型的集合,到此,请求域中所有数据已经在fileItem中了
《7》接下来遍历取数据就可以,这里我采用迭代器方式循环
《8》创建一个迭代器,Iterator<FileItem> iter = fileItem.iterator();泛型是FileItem没什么可说的
《9》while循环取数据,如果有数据,则取出来 FileItem item = iter.next();到此,item对应的就是表单中的每一个元素了,并不知道具体对应的是哪一个元素,如果是普通的数据,直接取数据就可以,但是如果是图片,附件啥的就不能正常取值,所以推断出是2中分支,需要判断
《10》
网友评论