我想知道如何使用http4s库处理多部分内容。
想象一个具有以下片段的服务(完整的要点在这里):
case GET -> Root / "form" =>
Ok(
"""|<html>
|<body>
|<form method="post" action="/post" enctype="multipart/form-data">
| <input type="date" name="birthDate" placeholder="birthDate">
| <input type="file" name="dataFile">
| <input type="submit">
|</form></body></html>""".stripMargin).
withContentType(Some(`Content-Type`(`text/html`)))
case req @ POST -> Root / "post" => {
req.decode[Multipart[IO]] { m =>
Ok(
s"""Multipart Data\nParts:${m.parts.length}
|${m.parts.map { case f: Part[IO] => { f.name + ", headers: " + f.headers.mkString(",")} }.mkString("\n")}""".stripMargin)
}
}
如果我执行服务并填写相应的字段,我将获得如下输出:
Multipart Data
Parts:2
Some(birthDate), headers: Content-Disposition: form-data; name="birthDate"
Some(dataFile), headers: Content-Disposition: form-data; name="dataFile";
filename="file.pdf",Content-Type: application/pdf
所以我知道如何获取有关部件的信息,这些部件是 typePart[IO]
和 contains headers
and的元素body
。
我想知道如何处理这些部分。例如,在这种情况下,我想打开文件并告知其长度。这样做的惯用方法是什么?