commons-fileupload框架源码解析(二)--HTTP

  1. commons-fileupload框架源码解析(一)--实例
  2. commons-fileupload框架源码解析(二)--HTTP
  3. commons-fileupload框架源码解析(三)--ParseRequest
  4. commons-fileupload框架源码解析(四)--FileItemIterator
  5. commons-fileupload框架源码解析(五)--MultipartStream
  6. commons-fileupload框架源码解析(六)--ParameterParser
  7. commons-fileupload框架源码解析(七)--FileCleaningTracker
  8. commons-fileupload框架源码解析(八)--DeferredFileOutputStream

第二章简介

本章主要文件传输HTTP请求协议内容,我们用POSTMEN去调用第一章的实例。


commons-fileupload框架源码解析(二)--HTTP_第1张图片
图1.png

点击图1红色框,选择HTTP,可以看到HTTP的协议的内容


commons-fileupload框架源码解析(二)--HTTP_第2张图片
图2.png

消息头

图2的1~6行就是HTTP的消息头

  • 第一行:POST表示以POST的请求方式请求,/fileUploadServlet是请求路径,HTTP/1.1是HTTP的版本
  • 第二行:Host表示请求服务器的域名/IP地址和端口号
  • 第三行:token,这个是我们自定义的消息头
  • 第四行:Cache-Control表示缓存控制,no-cache表示不使用缓存,直接向服务器发起请求。
  • 第五行:Postman-Token表示Postman的token值,这个是Postmen的自定义消息头
  • 第六行:Content-Type表示这个HTTP的内容类型,multipart/form-data表示表单类型,boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW表示文本体分隔符

消息主体

图2的8~17行就是消息主体,该HTTP的Content-Type是multipart/form-data,该消息主体也叫multipart boday,消息主体包含的就是参数数据。我们可以通过HttpServletRequest.getInputStream方法获得这个HTTP的消息主体内容。如下:

public static byte[] readInputStream(InputStream inStream) throws Exception {
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        boolean var3 = false;

        int len;
        while((len = inStream.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }

        outSteam.close();
        inStream.close();
        return outSteam.toByteArray();
    }
   try {
            System.out.println(new String(readInputStream(req.getInputStream())));
        } catch (Exception e) {
            e.printStackTrace();
        }
commons-fileupload框架源码解析(二)--HTTP_第3张图片
图3,HttpServletRequest.getInputStream的内容
  • 第8行:消息主体的分割线,其实就是两个‘-’+消息头Content-Type的boundary的值,消息主体分割线的作用就是区分表单的各个内容参数数据
  • 第9行:消息主体内容参数的消息头,Content-Disposition是指示回复的内容该以何种形式展示,在multipart boday中,Content-Disposition一般总是固定form-data不变,test是参数名。
  • 第11行: 就是参数名test的参数值
  • 第12行:和第8行一样,也是消息主体的分割线
  • 第13行:和第9行一样,也是消息主体内容参数的消息头,后面多个一个filename是传输过来的源文件名,可以说多个这个filename,我们就可以认为这个参数值是个文件(图2看不到具体值,可以看图3)
  • 第14行:Content-Type表示消息主体内容参数的内容类型,其值是MIME类型的对应的值,同时也说明该文件是什么类型,txt的文件,MIME就是text/plain(图2看不到具体值,可以看图3)。
  • 第16行:和第11行一样,就是参数名file的参数值。(图2看不到具体值,可以看图3)
  • 第17行:文本主体的最后一个分割线,分割线后面会多两个'-'

你可能感兴趣的:(commons-fileupload框架源码解析(二)--HTTP)