http4sライブラリを使用してマルチパートコンテンツを処理するにはどうすればいいですか?http4sでのマルチパートコンテンツの処理
は(完全な要旨はhereである)次のスニペットを使用してサービスを想像してみて:
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
したがって、Part[IO]
タイプの要素で、headers
とbody
の要素を取得する方法を知っています。
これらの部分の処理方法を知りたいと思っています。この場合、たとえば、ファイルを開き、その長さを通知したいと思います。それを行う慣用方法は何ですか?
以前の解決策の1つの問題は、ファイルが大きすぎる場合です。 – Labra