Scala 工具包

如何通过 HTTP 上传文件?

语言

你可以在一行中要求整个工具包

//> using toolkit latest

或者,你也可以只要求 sttp 的特定版本

//> using dep com.softwaremill.sttp.client4::core:4.0.0-M1

在你的 build.sbt 文件中,你可以添加对工具包的依赖

lazy val example = project.in(file("example"))
  .settings(
    scalaVersion := "3.2.2",
    libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7"
  )

或者,你也可以只要求 sttp 的特定版本

libraryDependencies += "com.softwaremill.sttp.client4" %% "core" % "4.0.0-M1"

在你的 build.sc 文件中,你可以添加对工具包的依赖

object example extends ScalaModule {
  def scalaVersion = "3.2.2"
  def ivyDeps =
    Agg(
      ivy"org.scala-lang::toolkit:0.1.7"
    )
}

或者,你也可以只要求 sttp 的特定版本

ivy"com.softwaremill.sttp.client4::core:4.0.0-M1"

上传文件

要上传文件,你可以将 Java Path 放入请求的正文中。

你可以直接使用 Paths.get("path/to/file") 获取 Path,或使用 toNIO 将 OS-Lib 路径转换为 Java 路径。

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

多部分请求

如果 Web 服务器可以一次接收多个文件,你可以使用多部分正文,如下所示

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()

sttp 文档 中了解有关多部分请求的更多信息。

此页面的贡献者