Servlet上传文件:
  Servlet 3.0改进了部分API,其中HttpServletRequest增加了对文件上传的支持。

  HttpServletRequest提供了两个方法来处理文件上传:
    1.Part getPart(String name):根据名称来获取文件上传域

    2.Collection<Part> getParts():获取所有的文件上传域

  上面两个方法的返回值都涉及一个API:Part,每个Part对象对应于一个文件上传域,该对象提供了很多方法来范文上传文件的文件类型、大小、输入流等,并提供了一个write(String file)方法将上传文件写入服务器磁盘。

  向服务器上传文件,表单里要使用<input type="file" .../>,并且,上传文件一定要为表单域设置enctype属性。
表单的enctype属性指的是表单数据的编码方式,该属性有三个值:
  1.application/x-www-form-urlencoded:默认的编码方式,只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式

  2.multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里

  3.text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件的方式

  文件上传示例:

  页面jsp:

<%--Created by IntelliJ IDEA.User: AdministratorDate: 2018/1/4Time: 16:46To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Servlet文件上传</title>
</head>
<body><form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">普通参数:<input type="text" name="inputText" ><br>选择文件:<input type="file" name="file" ><br><input type="submit" value="上传"></form>
</body>
</html>

  Servlet程序:

/*** Description:servlet* Author: Eleven* Date: 2018/1/13 16:23*/
@WebServlet(name="upload",urlPatterns = "/upload")
@MultipartConfig  //处理文件上传的Servlet,必须要加此注解
public class UploadServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//解决接收参数为中文乱码的问题request.setCharacterEncoding("UTF-8");//解决向页面输出内容为乱码,即使用out.println()的时候response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();//获取普通请求参数String inputText = request.getParameter("inputText");System.out.println("普通的参数为:"+inputText);//获取文件上传域Part part = request.getPart("file");//文件的上传类型System.out.println("文件的上传类型:"+part.getContentType());//文件上传的大小System.out.println("上传文件的大小:"+part.getSize());//文件上传域的Header NameCollection<String> headerNames = part.getHeaderNames();//遍历文件上传域的Header Name Valuefor(String headerName:headerNames){System.out.println(headerName+"---->"+part.getHeader(headerName));}//获取包含原始文件名的字符串String fileNameInfo = part.getHeader("content-disposition");//提取上传文件的文件名String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename=\"")+10,fileNameInfo.length()-1);//将文件写入服务器磁盘  保存在web应用根路径下的upload文件下part.write(getServletContext().getRealPath("upload")+"/"+fileName);out.println("文件上传成功!");}}

  

  对于传统的文件上传需要借助common-fileupload等工具,处理起来有点复杂,借助Servlet 3.0的API,处理文件就变得比较简单了。

转载于:https://www.cnblogs.com/eleven258/p/8286650.html

Servlet笔记2-文件上传相关推荐

  1. 原生Servlet文件上传和下载Servlet多个文件上传

    2019独角兽企业重金招聘Python工程师标准>>> 转载:原文连接https://blog.csdn.net/HaHa_Sir/article/details/81744629 ...

  2. MVC分层+JDBC+数据库+Servlet实现JSP文件上传和显示+模糊查询+分页

    本文章主要介绍了一个简单的实例:用简单的MVC分层思想,使用数据库在web界面进行增删改查,以及上传,模糊查询+分页的实现. 1.util层(数据库连接管理) :连接数据库需要导包:mysql-con ...

  3. 超全面的JavaWeb笔记day22文件上传

    文件上传概述 1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: 1. 必须使用 ...

  4. java web 文件上传_Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思 ...

  5. servlet part对象文件上传

    1. part上传 如果文件上传不成功.需要显示定义文件存储位置: @MultipartConfig(location = "E:/text") 文件上传核心代码: String ...

  6. 网安学习笔记-1 文件上传

    文件上传漏洞初步认识 什么是文件上传漏洞 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等 文件上传漏洞的危害 可以通过文件上传漏洞上传 ...

  7. 小迪渗透笔记:文件上传(1)

    文件上传(1) 1.概述 2.常规文件上传地址获取 3.文件上传基础 4.黑名单绕过 5.白名单绕过 1.概述 (1)什么是文件上传漏洞? 程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户 ...

  8. antd vue表单上传文件_AntDesign vue学习笔记-自定义文件上传

    上传文件时实际可能需要传输一个token. 方法一: 1.查看vue antdesign文档 https://vue.ant.design/components/upload-cn/ 2.使用cust ...

  9. 【工作笔记】文件上传下载时文件过大或请求过大

    异常信息 异常:org.springframework.web.util.NestedServletException : Request processing failed; nested exce ...

最新文章

  1. 【转】on delete cascade
  2. DRX不连续接收(1)
  3. Python——常用模块
  4. XEvent--Demo--使用XEvent来捕获在数据库DB1上发生的锁请求和锁释放
  5. UVA - 10480 Sabotage(最小割-最大流+输出割边)
  6. TFS命令tf:undo(强制签入签出文件)
  7. MetaMask以太坊钱包插件
  8. 程序.NET Framework版本升级,重签名,重链接,批量签名工具
  9. SqlServer中如何按姓氏笔画排序
  10. 杨澜给80后女孩子的14个忠告
  11. 查看apk包名和Activity名
  12. 华为数据治理及数据分类管理实践
  13. visio一分二的箭头_visio双箭头怎么画? visio2013绘制双箭头直线的教程
  14. 工业相机SDK二次开发
  15. Photoshop脚本 图层的栅格化
  16. 知识图谱架构(Knowledge Graph)
  17. C Primer Plus (第六版) 第十四章_编程练习答案
  18. 叠加原理--戴维南等效电路--第四篇
  19. debian 网络代理_在Ubuntu 18.04/Debian 10上设置系统范围的Proxy(代理)
  20. Windows系统在CMD命令行中用del命令删除文件

热门文章

  1. BLE通信过程中,一次连接间隔最多可以发多少包,BLE的最大通信速度为多少
  2. JSON在JS和JAVA的处理
  3. int (*p)[4] 与 int* p[4]
  4. linux c编程操作数据库(sqlite3应用)
  5. oracle自动化,oracle自动分析
  6. 如何传date参数_如何使用Python获取指定股票的5/15/30/60分钟线数据?
  7. Codis安装与部署
  8. 问题 G: 果汁店的难题(贪心)
  9. kettle 脚本 java_Kettle 执行SQL脚本
  10. 为什么说DevOps的必然趋势是BizDevOps?