Skip to content

MIME 支持

概述

Solpic提供了MIME类型为application/x-www-form-urlencodedmultipart/form-dataAPI特化支持,分别对应于类UrlEncodedFormMultipartData,两者都是基于Builder模式提供服务。

使用 UrlEncodedForm

初始化Builder如下:

java
// 不指定编码,默认为UTF-8
UrlEncodedForm.Builder builder1 = UrlEncodedForm.newBuilder();

// 指定编码
UrlEncodedForm.Builder builder2 = UrlEncodedForm.newBuilder(StandardCharsets.UTF_8);

基于Builder创建UrlEncodedForm如下:

java
UrlEncodedForm form = UrlEncodedForm.newBuilder(StandardCharsets.UTF_8)
        .add("foo", "bar")   // 添加k=v,其中k和v都会进行URL编码处理
        .addEncoded("a", "b")  // 添加k=v,不会进行URL编码处理
        .writeContentTypeCharset()  // 把charset添加到Content-Type中,例如application/x-www-form-urlencoded; charset=UTF-8
        .build();

基于UrlEncodedForm实例创建请求对象:

java
HttpRequest httpRequest = HttpRequest.newBuilder()
        .uri(URI.create("https://httpbin.org/post"))
        .method(HttpMethod.POST)
        .payloadPublisher(form)
        .build();

使用 MultipartData

初始化Builder如下:

java
// 不指定编码,默认为UTF-8,基于UUID快速生成算法生成boundary
MultipartData.Builder builder1 = MultipartData.newBuilder();

// 指定编码,基于UUID快速生成算法生成boundary
MultipartData.Builder builder2 = MultipartData.newBuilder(StandardCharsets.UTF_8);

// 指定编码和boundary
MultipartData.Builder builder3 = MultipartData.newBuilder("--my-boundary",StandardCharsets.UTF_8);

基于Builder创建MultipartData并且创建请求对象如下:

java
MultipartData multipartData = MultipartData.newBuilder()
        .addTextPart("foo", "bar")
        .addFilePart("file", Paths.get("/path/log.txt"))
        .build();
HttpRequest httpRequest = HttpRequest.newBuilder()
        .uri(URI.create("https://httpbin.org/post"))
        .method(HttpMethod.POST)
        .payloadPublisher(multipartData)
        .build();

MultipartData.Builder支持添加三种类型的Part

  • 字符串文本,对应于addTextPart系列方法
  • 二进制序列(字节数组),对应于addBinaryPart系列方法
  • 文件,对应于addFilePart系列方法

更多用法可以参考MultipartData.Builder接口中的方法定义。

TIP

如果想进一步了解MIME类型为multipart/form-data的请求内容格式,可以参考笔者之前写过的一篇文章:理解 HTTP 协议中的 multipart/form-data

贡献者

页面历史

Released under the MIT License.