如何使用 Java Http 客户端发送带有多部分/表单数据主体的 PUT 请求?

问题描述

我正在使用 HttpClient 上可用的 HttpRequestjava.net.http。我已经成功发送了一些 GET 和 POST 请求,但我不知道如何发送带有 multipart/form-data 正文的 PUT/POST 请求:

HttpRequest dataRequest = HttpRequest.newBuilder()
        .header("accept","*/*")
        .header("Content-Type","multipart/form-data")
        // .POST() ??
        .uri(URI.create(DATA_URL)
        .build();

与此请求等效的 curl 类似于:

curl -X PUT "https://www.example.com/data" -H  "accept: */*" -H  "Content-Type: multipart/form-data" -F "file=@audiofile.wav;type=audio/wav"

我应该在 BodyPublishersPOST() 方法中使用某种 PUT() 来实现吗?有什么线索吗?

解决方法

HttpClient API 尚不支持开箱即用的 Multipart/form-data。

在 JDK 16 中,有一个新的 HttpRequest.BodyPublishers.concat(BodyPublisher...) 方法可用于帮助构建请求主体,该请求主体由来自异构源的字节串联而成。 但是您必须手动组合所有不同的部分,并在需要时/如果需要处理 base64 编码。

你也可以试试methanol