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: Administrator
Date: 2018/1/4
Time: 16:46
To 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{
@Override
protected 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 Name
Collection<String> headerNames = part.getHeaderNames();
//遍历文件上传域的Header Name Value
for(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,处理文件就变得比较简单了。

Servlet笔记2-文件上传的更多相关文章

  1. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  2. 使用jsp/servlet简单实现文件上传与下载

    使用JSP/Servlet简单实现文件上传与下载    通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用 ...

  3. 【Demo Project】AjaxSubmit+Servlet表单文件上传和下载

    一.背景 前段时间公司要求我做一个上传和下载固件的页面,以备硬件产品在线升级,现在我把这部分功能抽取出来作为一个Demo Project给大家分享. 话不多说,先看项目演示 --> 演示  源码 ...

  4. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  5. springmvc学习笔记--支持文件上传和阿里云OSS API简介

    前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...

  6. 超全面的JavaWeb笔记day22<文件上传>

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

  7. Java精选笔记_文件上传与下载

    文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...

  8. 基于Servlet+smartUpload的文件上传

    文件上传在web应用中是非常常见的,现在我就介绍下基于servlet的文件上传,基于Struts2的文件上传可以看: 页面端代码: <%@ page language="java&qu ...

  9. Javaweb学习笔记10—文件上传与下载

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

随机推荐

  1. Elasticsearch查询优化总结

    查询优化 1 从提高查询精确度进行优化: 本部分主要针对全文搜索进行探究. 1.1 倒排索引 1.1.1 什么是倒排索引: 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文 ...

  2. STL之map&multimap使用简介

    map 1.insert 第一种:用insert函数插入pair数据 #include <map> #include <string> #include <iostrea ...

  3. 深入理解css之float

    1.float的历史 float的设计的初衷:文字环绕效果 2.包裹与破坏 增强浮动的感性认知 包裹:1.收缩 2.坚挺 3.隔绝 里面的布局和外面一点关系都没有 包裹的特性就是BFC block f ...

  4. URAL 1732. Ministry of Truth ( KMP 多模式串匹配 )

    问在第一个串中删掉几个字符能否得到第二个串.注意在第二个串中不连续的单词在第一个串中也必须不连续. 一组数据: Input: abababbbbababbb aba ab Output: I HAVE ...

  5. 201621123034 《Java程序设计》第13周学习总结

    作业13-网络 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以 ...

  6. P4397 [JLOI2014]聪明的燕姿

    P4397 [JLOI2014]聪明的燕姿 题目背景 阴天傍晚车窗外 未来有一个人在等待 向左向右向前看 爱要拐几个弯才来 我遇见谁会有怎样的对白 我等的人他在多远的未来 我听见风来自地铁和人海 我排 ...

  7. 使用C#创建windows服务程序

    创建windows服务项目 一.创建服务 1.文件->新建->项目->windows桌面->windows服务,修改你要的项目名称.我这不改名,仍叫WindowsService ...

  8. 《c程序设计语言》读书笔记-3.6-数字转字符串最小宽度限制

    #include <io.h> #include <stdio.h> #include <string.h> #include <stdlib.h> # ...

  9. Visual Studio中的/MD, /MT, /MDd, /MTd 选项

    Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. / ...

  10. UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律

    UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...