文件上传原理

这是在一个网络视频里我做的随堂笔记,部分内容可能不太严谨,但对于文件上传所需要的部件和必要条件的了解上还是有帮助的。

1、文件上传原理分析
文件上传方式有很多,但底层的实现都是文件的读写操作(I/O读写)

1.1文件上传的必要前提
• 提供form表单、method必须是post
• form表单的entype必须是multipart/form-data
• 提供input type=“file”类的上传输入域

1.2 enctype (编码类型-encoding type)属性
作用:告知服务器请求正文的MIME类型.
MIME 类型: MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据

可选值:
application/x-www-form-urlencoded(默认):在发送前编码所有字符
multipart/form-data:不对字符编码,二进制字节流
使用multipart/form-data传送数据不能使用request.getparameter读取,因为使用multipart/form-data是传送字节的,而request.getparameter是读取字符的。
解决方法:文件上传原理_第1张图片
数据具体传输的过程可以参考下面链接
enctype和请求消息头里的Content-type的关系
深入解析 multipart/form-data

2、借助第三方的上传组件实现文件上传

fileupload
Fileupload 是由apache的commons组件提供的上传组件。它主要的工作就是帮助我们分析request.getInputStream().

需要导入的jar包:

<!--https://mvnrepository.com/artifact/commons-io/commons-io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!--https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>

fileupload的核心类

  • DiskFileItemFactory – 设置磁盘空间,保存临时文件。只是一个具类。
  • ServletFileUpload - 文件上传的核心类,此类接收request,并解析reqeust
  • List=ServletFileUpload.parseRequest(request); - 解析request
    文件上传原理_第2张图片
    一个FileItem就是一个标识分隔符开始 到结束。如下图:
    文件上传原理_第3张图片

你可能感兴趣的:(文件上传原理)