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

如何用Java版Akka构建multipart/form-data格式的HTTP请求

Akka Java 实现 multipart/form-data POST 请求

要创建包含文件和文本字段的multipart/form-data类型POST请求,你可以借助Akka HTTP的Multipart.FormData工具类构建请求实体,以下是完整实现示例:

完整代码示例

import akka.http.javadsl.model.HttpRequest;
import akka.http.javadsl.model.HttpHeader;
import akka.http.javadsl.model.multipart.FormData;
import akka.http.javadsl.model.ContentTypes;
import akka.util.ByteString;
import java.nio.file.Paths;

// 构建表单文本字段
FormData.Part textField1 = FormData.createFormField("fieldName1", "textValue1");
FormData.Part textField2 = FormData.createFormField("fieldName2", "textValue2");
FormData.Part textField3 = FormData.createFormField("fieldName3", "textValue3");

// 构建文件字段:从本地文件读取内容
FormData.Part fileField = FormData.createFilePart(
    "fileFieldName",          // 表单中文件对应的字段名
    "uploaded-file.txt",      // 上传时的显示文件名
    ContentTypes.TEXT_PLAIN_UTF8, // 文件的Content-Type
    ByteString.fromPath(Paths.get("/your/local/file/path.txt")) // 文件内容的ByteString
);

// 组合所有表单部分为FormData实体
FormData formData = FormData.create(textField1, textField2, textField3, fileField);

// 构建最终POST请求
HttpRequest httpRequest = HttpRequest.POST(uri)
    .withEntity(formData.toEntity())
    .addHeader(HttpHeader.parse("Authorization", token));

关键部分说明

  • 文本字段:通过FormData.createFormField创建,参数依次为表单字段名、字段值。
  • 文件字段:通过FormData.createFilePart创建,需指定表单字段名、显示文件名、文件Content-Type,以及文件内容的ByteString(支持从本地路径、输入流等多种来源生成)。
  • 实体转换:将组合好的FormData通过toEntity()转为请求实体,直接设置到POST请求中即可。
  • 大文件处理:ByteString.fromPath采用异步流式读取,无需一次性加载整个文件到内存,适合大文件上传场景。

内容的提问来源于stack exchange,提问作者dave.c

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:33:12