目录
    1、文件上传表单 和 普通文本表单 的区别
    2、文件上传对页面的要求
    3、文件上传对Servlet的要求
    4、fileupload概述
    5、fileupload简单应用
    6、fileupload上传示例
================================================================
文件上传概述

1、文件上传表单 和 普通文本表单 的区别文件上传表单:<form action="" method="post" enctype="multipart/form-data">-- 表示多部件表单数据,使用流上传数据。普通文本表单:(可以不设置enctype属性)-- 当method="get"时,enctype的默认值为null,没有正文,所以就不需要enctype了。-- 当method="post"时,enctype的默认值为"application/x-www-form-urlencoded",表示使用url编码正文;2、文件上传对页面的要求1)必须使用表单,而不能是超链接;2)表单的method必须是POST,而不能是GET;3)表单的enctype属性必须是"multipart/form-data"4)在表单中添加file表单字段,即<input type="file" name="xxx"/>例如:<form action="${pageContext.request.contextPath }/FileUploadServlet" method="post" enctype="multipart/form-data">用户名:<input type="text" name="username"/><br/>文件1:<input type="file" name="file1"/><br/>文件2:<input type="file" name="file2"/><br/><input type="submit" value="提交"/></form>3、文件上传对Servlet的要求表单是文件上传表单时,对Servlet也是有要求的。文件上传表单的数据也是被封装到request对象中的。request.getParameter(String)方法获取指定的表单项字符内容,但文件上传表单已不在是字符内容而是字节内容,所以失效。使用 ServletInputStream  request.getInputStream()方法获取整个表单内容放到IO流中,它是InputStream接口的子类,这个ServletInputStream对象对应整个表单的正文部分(按F12 查看请求信息是从第一个分隔线开始,到最后),这说明我们需要的解析流中的数据。当然解析它是很麻烦的一件事情,而Apache已经帮我们提供了解析它的工具:commons-fileupload。可以尝试把request.getInputStream()这个流中的内容打印出来,再对比httpWatch中的请求数据。public void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {InputStream in = request.getInputStream();String s = IOUtils.toString(in);System.out.println(s);}Servlet的要求小结:(1)方法 request.getParameter() 失效,无法获取表单数据;(2)使用 request.getInputStream()得到所有的表单数据,而不是一个表单项的数据;(3)这说明如果不使用fileupload,我们就需要自己来对 request.getInputStream() 的内容进行解析!!!4、fileupload概述fileupload是由apache的commons组件提供的上传组件。它最主要的工作就是帮我们解析request.getInputStream()。fileupload组件需要的JAR包有:commons-fileupload.jar,核心包;commons-io.jar,依赖包。
5、fileupload简单应用fileupload的核心类有:DiskFileItemFactory、ServletFileUpload、FileItem。使用fileupload组件的步骤如下:1.创建工厂类DiskFileItemFactory对象:DiskFileItemFactory factory = new DiskFileItemFactory();2.使用工厂创建解析器对象:ServletFileUpload fileUpload = new ServletFileUpload(factory);3.使用解析器来解析request对象:List<FileItem> list = fileUpload.parseRequest(request);隆重介绍FileItem类,它才是我们最终要的结果。一个FileItem对象对应一个表单项(表单字段)。一个表单中存在文件字段和普通字段,可以使用FileItem类的isFormField()方法来判断表单字段是否为普通字段,如果不是普通字段,那么就是文件字段了。* boolean isFormField():判断当前表单字段是否为普通文本字段,true表示普通表单项;false表示文件表单项;--------------------* String getFieldName():获取字段名称,例如:<input type="text" name="username"/>,返回的是username;* String getString():获取字段的内容,如果是文件字段,那么获取的是文件内容,当然上传的文件必须是文本文件;--------------------* String getName():获取文件字段的文件名称;* String getContentType():获取上传的文件的类型,例如:text/plain* int getSize():获取上传文件的大小;* InputStream getInputStream():获取上传文件对应的输入流;* void write(File):把上传的文件保存到指定文件中。
6、fileupload上传示例需求:写一个简单的上传示例:* 表单包含一个用户名字段,以及一个文件字段;* Servlet保存上传的文件到uploads目录,显示用户名,文件名,文件大小,文件类型。步骤:第一步:完成index.jsp,只需要一个表单。注意表单必须是post的,而且enctype必须是mulitpart/form-data的。<form action="/FileUploadServlet" method="post" enctype="multipart/form-data">用户名:<input type="text" name="username"/><br/>文件1:<input type="file" name="file1"/><br/><input type="submit" value="提交"/></form>第二步:完成 FileUploadServletpublic void doPost(HttpServletRequest request, HttpServletResponse response) throws Exception {request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");/*** 1、创建工厂* 2、创建解析器* 3、得到文件列表*/// 1、创建工厂DiskFileItemFactory dfif = new DiskFileItemFactory();//设置缓存大小及目录// DiskFileItemFactory dfif = new DiskFileItemFactory(1024*20, new File("F:\\temp"));// 2、使用工厂创建解析器对象ServletFileUpload fileUpload = new ServletFileUpload(dfif);// 3、使用解析器对象解析request,得到FileItem列表List<FileItem> list = fileUpload.parseRequest(request);for(FileItem fileItem : list) {if(fileItem.isFormField()) {  //判断是否为普通表单项String fieldName = fileItem.getFieldName();// 获取当前表单项的字段名称if(fieldName.equals("username")) {response.getWriter().print("用户名:" + fileItem.getString() + "<br/>");}}else{  //如果当前表单项不是普通表单项,说明就是文件表单项String fileName = fileItem.getName();//获取上传文件的名称// 如果上传的文件名称为空,即没有指定上传文件if(fileName == null || fileName.isEmpty()) {continue;}// 获取真实路径,对应${项目目录}/uploads,当然,这个目录必须存在String savepath = this.getServletContext().getRealPath("/WEB-INF/uploads");// 通过uploads目录和文件名称来创建File对象File file = new File(savepath, fileName);fileItem.write(file); // 把上传文件保存到指定位置response.getWriter().print("上传文件名:" + fileName + "<br/>");response.getWriter().print("上传文件大小:" + fileItem.getSize() + "<br/>");response.getWriter().print("上传文件类型:" + fileItem.getContentType() + "<br/>");}}}

fileupload文件上传用法概述相关推荐

  1. fileUpload 文件上传

    2019独角兽企业重金招聘Python工程师标准>>> 声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础 ...

  2. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  3. ASP.NET Web程序设计——FileUpload文件上传控件

    FileUpload文件上传控件 主要功能:向指定的目录上传文件 控件包括:一个文本框 一个浏览按钮 属性 说明 HasFile 控件是否含有将要上传的文件 FileName 上传文件的文件名 Sav ...

  4. 【文件上传漏洞-01】文件上传漏洞概述、防御以及WebShell基础知识补充

    目录 1 文件上传漏洞概述 2 文件上传漏洞防御.绕过.利用 2.1 黑白名单策略 3 WebShell基础知识补充 3.1 WebShell概述 3.2 大马与小马 1 文件上传漏洞概述 概述:文件 ...

  5. fileupload文件上传、下载教程

    fileupload概述 fileupload是由apache的commons组件提供的上传组件.它最主要的工作就是帮我们解析request.getInputStream(). 使用fileuploa ...

  6. FileUpload文件上传

    1.进行文件上传时,表单需要做的准备: 1).请求方式为POST:<form action="uploadServlet" method="post".. ...

  7. asp.net fileupload 文件上传后服务器上找不到文件,Asp.net中FileUpload控件上传文件例子...

    FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles ...

  8. commons fileUpload 文件上传下载

    commons fileUpload 的使用: commons fileUpload 官网:http://commons.apache.org/fileupload/ 在上面可以下载:commons- ...

  9. web--使用fileupload进行文件上传

    FileUpload文件上传 fileUpload是apache的commons组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream(). 使用fileUploa ...

最新文章

  1. jinfo 的相关使用 || 两个经典的参数: -Xms -Xmx
  2. 我要做 Android 之面笔试总结
  3. 2019年4月8日 1021. Remove Outermost Parentheses
  4. linux系统参加网络会议,在Deepin Linux系统下运行腾讯会议的方略
  5. 【转】CT解析重建**
  6. VM虚拟机连Linux黑屏问题
  7. android defStyleAttr/defStyleRes
  8. lnmp之PDO_mysql.so
  9. [Zeppelin]Zeppelin安装与初体验
  10. UCDOS中的点阵字库HZK12,HZK16,HZK24,ASC12,ASC16(转)
  11. MQTT 物联网Mosquitto服务器配置要点
  12. SAP各模块表清单及逻辑关系介绍
  13. 35岁前要培养的66种思维(中)
  14. java泛型中T和?和有什么区别
  15. JFreeChart| JFreeChart组合图表(Combined Charts)
  16. 【自然语言处理】【ChatGPT系列】大模型的涌现能力
  17. 农业产业化发展趋势下人力资源管理浅析
  18. Unity3D性能优化 之 内存优化篇
  19. 七天玩转Redis | Day7、Redis常见面试题及课程总结
  20. 测试开发——测试分类

热门文章

  1. 使用荷兰式拍卖模型以最优惠的价格出售您的 NFT
  2. java 画爱心壮那首歌最,抖音貂蝉大招画爱心的背景音乐是什么_貂蝉大招画爱心的BGM歌曲介绍_咖绿茵手游站...
  3. Matlab 2015b 激活失效后,重新激活
  4. js实现倒计时5秒提交及redis防止多人同时提交
  5. 你必须知道的经济学经典定理
  6. 全世界最著名的经济金融学网站
  7. origin作图 基础中的基础 一图一opj
  8. 【排序综合】直接插入排序,希尔排序,快速排序,堆排序,冒泡排序,简单选择排序的简介,实现和算法复杂度分析
  9. 理想职业计算机程序英语作文,理想职业英语作文(通用5篇)
  10. HTML——背景属性