MIME 支持
概述
Solpic
提供了MIME
类型为application/x-www-form-urlencoded
和multipart/form-data
的API
特化支持,分别对应于类UrlEncodedForm
和MultipartData
,两者都是基于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