The Scala Toolkit
 
 How to upload a file over HTTP?
 Language
 
 
 Info: JavaScript is currently disabled, code tabs will still work, but preferences will not be remembered.
You can require the entire toolkit in a single line:
//> using toolkit latest
Alternatively, you can require just a specific version of sttp:
//> using dep com.softwaremill.sttp.client4::core:4.0.0-RC1
In your build.sbt file, you can add a dependency on the Toolkit:
lazy val example = project.in(file("."))
 .settings(
 scalaVersion := "3.4.2",
 libraryDependencies += "org.scala-lang" %% "toolkit" % "0.7.0"
 )
Alternatively, you can require just a specific version of sttp:
libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-RC1"
In your build.sc file, you can add a dependency on the Toolkit:
object example extends ScalaModule {
 def scalaVersion = "3.4.2"
 def ivyDeps =
 Agg(
 ivy"org.scala-lang::toolkit:0.7.0"
 )
}
Alternatively, you can require just a specific version of sttp:
ivy"com.softwaremill.sttp.client4::core:4.0.0-RC1"
Uploading a file
To upload a file, you can put a Java Path in the body of a request.
You can get a Path directly using Paths.get("path/to/file") or by converting an OS-Lib path to a Java path with toNIO.
import sttp.client4.quick._
val file: java.nio.file.Path = (os.pwd / "image.png").toNIO
val response = quickRequest.post(uri"https://example.com/").body(file).send()
println(response.code)
// prints: 200
import sttp.client4.quick.*
val file: java.nio.file.Path = (os.pwd / "image.png").toNIO
val response = quickRequest.post(uri"https://example.com/").body(file).send()
println(response.code)
// prints: 200
Multi-part requests
If the web server can receive multiple files at once, you can use a multipart body, as follows:
import sttp.client4.quick._
val file1 = (os.pwd / "avatar1.png").toNIO
val file2 = (os.pwd / "avatar2.png").toNIO
val response = quickRequest
 .post(uri"https://example.com/")
 .multipartBody(
 multipartFile("avatar1.png", file1),
 multipartFile("avatar2.png", file2)
 )
 .send()
import sttp.client4.quick.*
val file1 = (os.pwd / "avatar1.png").toNIO
val file2 = (os.pwd / "avatar2.png").toNIO
val response = quickRequest
 .post(uri"https://example.com/")
 .multipartBody(
 multipartFile("avatar1.png", file1),
 multipartFile("avatar2.png", file2)
 )
 .send()
Learn more about multipart requests in the sttp documention.