1. MinIO没有POST上传:

      MinIO实现的是完整的S3协议。对象操作只有两种: PutObjectPart: 上传分段(PUT请求)、 PutObject(PUT请求)。
      S3上传和普通上传的方式:
      a. S3上传方式: 普通上传、 分段上传
      b. 普通上传则按照HTTP Method,又可以分成: PutObject、 PostObject

      Post请求 是常见的表单上传模式,一种流式上传,一般浏览器为上传文件最常见。这种方式,在HTTP Headers可以不携带Content-Length,传输格式一般用chunked特殊格式来标识传输结束位置。 在S3协议里头,PutObject请求要求头部必须携带Content-length的,这样对象存储系统就能够知道要多大空间;但是PostObject的方式就特殊了,再上传结束前,后端无法知道数据多大。MinIO没有PostObject请求,很大原因是由于没有Content-length参数

    S3 是基于HTTP的协议HTTP 是基于TCP协议的应用层协议,而 TCP 是面向数据流的协议,是没有边界的。HTTP 作为应用层协议需要自己明确定义数据边界。 HTTP边界判定由于http1.1协议之后,http可以是一个keep-alive的,可以是一个流式协议。那么我们需要有办法去标识body边界,有三种方式:

    1. http包头部显式设置 Content-Length
    2. http传输编码方式用 Transfer-Encoding: chunked
    3. 短连接(连接断开)(第3种情况,一般作为异常场景看待。所以下面我们就讨论前两种情况)

    这两种情况都取决于客户端的协议是否遵守。正常情况,如果传输了Content-Length,就要和body一致。如果头部没有这个字段,那么也可以客户端采用Transfer-Encoding:chunked的编码方式传输body,也能让服务器正确的识别body的边界。

    1. 没有size怎么存储

    方法一:一小段一小段的数据收,收完一段数据存一份元数据,最后汇总所有元数据;还有一个最重要的限制:用户数据部分 file 字段必须在最后一个。
    方法二:后端在 buffer 里面收完整个请求,自然就能计算出 size,然后再把数据存储到后端;