我试图弄清楚如何使用 Akka HTTP(客户端 API)创建多部分表单数据请求,但我找不到表达表单数据的方法。
有谁知道如何创建将采用文件或输入流的表单数据?
实现这一目标的最简单方法是:
val formData = Multipart.FormData.
fromFile("<FORM_DATA_KEY>",
MediaTypes.`application/octet-stream`,
file = file,
100000)
val httpRequest = HttpRequest(HttpMethods.POST, uri = target, entity = formData.toEntity)
在第一行,您还可以使用Multipart.FormData.fromPath
which 将接受文件路径而不是文件对象本身。
我想现在有点晚了,但是这个例子有一个客户端和一个服务器。
我复制相关部分
def createEntity(file: File): Future[RequestEntity] = {
require(file.exists())
val formData =
Multipart.FormData(
Source.single(
Multipart.FormData.BodyPart(
"test",
HttpEntity(MediaTypes.`application/octet-stream`, file.length(), SynchronousFileSource(file, chunkSize = 100000)), // the chunk size here is currently critical for performance
Map("filename" -> file.getName))))
Marshal(formData).to[RequestEntity]
}
def createRequest(target: Uri, file: File): Future[HttpRequest] =
for {
e ← createEntity(file)
} yield HttpRequest(HttpMethods.POST, uri = target, entity = e)