Multipart requests¶
To set a multipart body on a request, the multipartBody method should be used (instead of body). Each body part is represented as an instance of Part[BasicRequestBody], which can be conveniently constructed using multipart methods coming from the sttp.client package.
A single part of a multipart request consist of a mandatory name and a payload of type:
StringArray[Byte]ByteBufferInputStreamMap[String, String]Seq[(String, String)]
To add a file part, the multipartFile method (also from the com.softwaremill.sttp package) should be used. This method is overloaded and supports File/Path objects on the JVM, and Web/API/File on JS.
The content type of each part is by default the same as when setting simple bodies: text/plain for parts of type String, application/x-www-form-urlencoded for parts of key-value pairs (form data) and application/octet-stream otherwise (for binary data).
The parts can be specified using either a Seq[Multipart] or by using multiple arguments:
def multipartBody(ps: Seq[Multipart])
def multipartBody(p1: Multipart, ps: Multipart*)
For example:
basicRequest.multipartBody(
multipart("text_part", "data1"),
multipartFile("file_part", someFile), // someFile: File
multipart("form_part", Map("x" -> "10", "y" -> "yes"))
)
Customising part meta-data¶
For each part, an optional filename can be specified, as well as a custom content type and additional headers. The following methods are available on Multipart instances:
case class Multipart {
def fileName(v: String): Multipart
def contentType(v: String): Multipart
def header(k: String, v: String): Multipart
}
For example:
basicRequest.multipartBody(
multipartFile("logo", logoFile).fileName("logo.jpg").contentType("image/jpg"),
multipartFile("text", docFile).fileName("text.doc")
)