You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中实现指定的CURL Multipart上传请求?

把Multipart CURL请求转为Java代码的解决方案

嘿,我帮你把这段curl请求转换成Java代码,给你两种常用的实现方案,都是处理multipart/form-data上传的可靠方式:

方案一:使用Java 11+自带的HttpClient(无需额外依赖)

这个方案不需要引入第三方库,适合用标准Java环境的项目:

import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;

public class MultipartUploadExample {
    public static void main(String[] args) throws IOException, InterruptedException {
        // 替换成你的实际token和文件路径
        String authToken = "YOUR_AUTH_TOKEN_HERE";
        File imageFile = new File("test.png");

        // 构建multipart请求体
        HttpRequest.BodyPublisher body = HttpRequest.BodyPublishers.ofMixed(
            HttpRequest.BodyPublishers.ofString("--boundary\r\nContent-Disposition: form-data; name=\"attached_file\"; filename=\"test.png\"\r\nContent-Type: image/png\r\n\r\n"),
            HttpRequest.BodyPublishers.ofFile(Path.of(imageFile.getAbsolutePath())),
            HttpRequest.BodyPublishers.ofString("\r\n--boundary\r\nContent-Disposition: form-data; name=\"from_comment\"\r\n\r\nFalse\r\n"),
            HttpRequest.BodyPublishers.ofString("--boundary\r\nContent-Disposition: form-data; name=\"object_id\"\r\n\r\n1\r\n"),
            HttpRequest.BodyPublishers.ofString("--boundary\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\n1\r\n--boundary--\r\n")
        );

        // 创建请求
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("http://localhost:8000/api/v1/tasks/attachments"))
            .header("Authorization", "Bearer " + authToken)
            .header("Content-Type", "multipart/form-data; boundary=boundary")
            .POST(body)
            .build();

        // 发送请求并处理响应
        HttpClient client = HttpClient.newHttpClient();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println("响应状态码: " + response.statusCode());
        System.out.println("响应体: " + response.body());
    }
}

说明:

  • 这里手动构建了multipart的边界(boundary),你也可以生成随机边界值提升通用性
  • 每个表单字段和文件都对应curl里的-F参数,字段名和值要完全匹配
  • from_comment在curl里是False,这里直接作为字符串传入——因为multipart表单字段本质都是文本类型

方案二:使用OkHttp库(更简洁易用)

如果你的项目已经引入了OkHttp,这个方案会更简洁,代码可读性更高:

首先需要添加Maven依赖(Gradle用户可对应调整):

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.12.0</version>
</dependency>

然后是Java代码:

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

import java.io.File;
import java.io.IOException;

public class OkHttpMultipartExample {
    public static void main(String[] args) throws IOException {
        String authToken = "YOUR_AUTH_TOKEN_HERE";
        File imageFile = new File("test.png");

        OkHttpClient client = new OkHttpClient();

        // 构建multipart请求体
        RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("attached_file", "test.png",
                RequestBody.create(imageFile, MediaType.parse("image/png")))
            .addFormDataPart("from_comment", "False")
            .addFormDataPart("object_id", "1")
            .addFormDataPart("project", "1")
            .build();

        // 创建请求
        Request request = new Request.Builder()
            .url("http://localhost:8000/api/v1/tasks/attachments")
            .addHeader("Authorization", "Bearer " + authToken)
            .post(requestBody)
            .build();

        // 发送请求并处理响应
        try (Response response = client.newCall(request).execute()) {
            System.out.println("响应状态码: " + response.code());
            System.out.println("响应体: " + response.body().string());
        }
    }
}

说明:

  • OkHttp会自动处理multipart的边界和Content-Type头,不需要手动拼接复杂的文本内容
  • addFormDataPart方法完美对应curl里的-F参数,文件字段需要指定文件名和媒体类型
  • 这里用了try-with-resources语法自动关闭响应流,避免资源泄漏

注意事项

  • 记得把YOUR_AUTH_TOKEN_HERE替换成实际的授权令牌
  • 确保test.png文件路径正确,或者换成绝对路径避免找不到文件
  • 生产环境中建议添加完善的异常处理逻辑,比如捕获IO异常、处理非2xx状态码的响应

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:24:03