<强> 1,文件上传的原理分析强>
,,,,1、文件上传的必要前提:
,,,,,,,,,,提供形式表单、方法必须是文章
,,,,,,,,b,形式表单的enctype必须是多部分/格式
,,,,,,,,c,提供输入类型="文件"类的上传输入域
,,,,2,enctype属性
,,,,作用:告知服务器请求正文的MIME类型(请求消息头:内容类型作用是一致的)
,,,,可选值:
,,,,应用程序/x-www-form-urlencoded(默认):
,,,,,,,,,正文:name=admin&密码=123;
,,,,,,,,,服务器获取数据:字符串名称=request.getParameter(“名字”);
,,,,多部分/格式:
,,,,,,,,,服务器获取数据:request.getParameter(字符串)方法获取指定的表单字段字符内容,但文件上传表单已经不再是字符内容,而是字节内容,所以失效。
,,,,文件上传:解析请求正文的每部分的内容
& lt; body> & lt;形式enctype="多部分/格式" action=" $ {pageContext.request。contextPath}/servlet/uploadServlet2”方法=" post "比; & lt;输入类型="文本" name="名称"/祝辞& lt; br/比; & lt;输入类型="文件" name="照片"/祝辞& lt; br/比; & lt;输入类型="提交" value=" https://www.yisu.com/zixun/上传”/祝辞& lt; br/比; & lt;/form> & lt;/body> 公开课UploadServlet1扩展HttpServlet { 公共空间doGet (HttpServletRequest请求,HttpServletResponse响应) 抛出ServletException IOException {/* *由于表单中提交数据的方式改为多部分/格式,所以request.getParameter(“名字”)失效 *字符串名称=request.getParameter(“名字”); 字符串的照片=request.getParameter(“照片”); System.out.println(名称); System.out.println(图);*/InputStream是=request.getInputStream (); int len=0; byte [] b=新的字节[1024]; 在((len=is.read (b)) !=1) { system . out。println(新字符串(b, 0, len)); } is.close (); } 公共空间doPost (HttpServletRequest请求,HttpServletResponse响应) 抛出ServletException IOException { doGet(请求、响应); } }
<强> 2,借助第三方的上传组件实现文件上传强>
,,,,1,fileupload概述
,,,,,,,,,类是由apache的共享组件提供的上传组件。它最主要的工作就是帮我们解析request.getInputStream ()
,,,,,,,,,导入commons-fileupload相关的jar包:
,,,,,,,,,,,,,,commons-fileupload。jar核心包
,,,,,,,,,,,,,,commons-io。jar依赖包
,,,,2,fileupload的核心类:
,,,,,,,,,DiskFileItemFactory、ServletFileUpload FileItem
,,,一个,解析原理
,,,3,fileupload简单应用
,,,,使用fileupload组件的步骤如下:
,,,,,,,,,1,创建工厂类DiskFileItemFactory对象:,,,,,
DiskFileItemFactory工厂=new DiskFileItemFactory ();
,,,,,,,,,2、使用工厂创建解析器对象:,,,,,,,,,,
ServletFileUpload fileUpload=new ServletFileUpload(工厂);
,,,,,,,,,3、使用解析器来解析请求对象:,,,,,,,,,,
List=fileUpload.parseRequest列表(请求)
,,,,FileItem对象对应一个表单项(表单字段)。可以是文件字段或普通字段
,,,,,,,,,布尔isFormField():判断当前表单字段是否为普通文本字段,如果返回假,说明是文件字段
,,,,,,,,,字符串getFieldName():获取字段名称,例如:& lt;输入类型=拔谋尽眓ame="用户名"/比;返回的是用户名
,,,,,,,,,字符串getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件
,,,,,,,,,字符串getName():获取文件字段的文件名称(a.txt)
,,,,,,,,,字符串getContentType():获取上传的文件的MIME类型,例如:文本/平原
,,,,,,,,,int getSize():获取上传文件的大小
,,,,,,,,,InputStream getInputStream():获取上传文件对应的输入流
,,,,,,,,,空写(文件):把上传的文件保存到指定文件中
,,,,,,,,,delete ()