1
私はWSコールでマルチパートフォームデータを送信したいと思います。私は、要求を変換するためにWritableを書き込もうとしましたが、結局、要求されたホスト上に空のボディを受け取りました。 Writableを修正する手助けをしてください。ここに私のコードです:Play Framework 2.5 WSポストmultipartform-data書き込み可能
object MultipartFormDataWritable {
val boundary = "----WebKitFormBoundary6s35viDB522LDEZQ"
def formatDataParts(data: Map[String, Seq[String]]) = {
val dataParts = data.flatMap { case (key, values) =>
values.map { value =>
val name = s""""$key""""
s"--$boundary\r\n${HeaderNames.CONTENT_DISPOSITION}: form-data; name=$name\r\n\r\n$value\r\n"
}
}.mkString("")
Codec.utf_8.encode(dataParts)
}
def filePartHeader(file: FilePart[TemporaryFile]) = {
val name = s""""${file.key}""""
val filename = s""""${file.filename}""""
val contentType = file.contentType.map { ct =>
s"${HeaderNames.CONTENT_TYPE}: $ct\r\n"
}.getOrElse("")
Codec.utf_8.encode(s"--$boundary\r\n${HeaderNames.CONTENT_DISPOSITION}: form-data; name=$name; filename=$filename\r\n$contentType\r\n")
}
val singleton = Writeable[MultipartFormData[TemporaryFile]](
transform = { form: MultipartFormData[TemporaryFile] =>
formatDataParts(form.dataParts) ++
form.files.flatMap { file =>
val fileBytes = Files.readAllBytes(Paths.get(file.ref.file.getAbsolutePath))
filePartHeader(file) ++ fileBytes ++ Codec.utf_8.encode("\r\n")
} ++
Codec.utf_8.encode(s"--$boundary--")
},
contentType = Some(s"multipart/form-data; boundary=$boundary")
)
}
私のコードは、プロキシとして働く要求を受信して、いくつかのヘッダーの更新を指示する。..だから、それはない唯一のカスタマイズされた要求のために働いて参照してください。私は暗黙のうちにすべてのボディタイプをサポートするように変換しようとしています –