如何在 Akka Http 中为 HttpResponse 设置 MediaType?

How to set MediaType for HttpResponse in Akka Http?

我正在构建一个端点,该端点在 Akka HTTP 的帮助下 returns 图像。我从 AWS S3 获取图像作为 ByteString 的流。每张图片都有自己的 MediaType (image/gif, image/png, ...)

当我们有媒体类型字符串表示时,如何构造具有特定媒体类型的 HttpResponse 实体?

HttpResponse(StatusCodes.OK, entity = HttpEntity(image))

你可以使用-

val httpResponse = HttpEntity(MediaTypes.`image/gif`, <byte array of your image>)

要从字符串中获取 MediaType,请使用 MediaType.parse:

def parse(value: String): Either[List[ErrorInfo], MediaType]

Tries to parse a MediaType value from the given String. Returns Right(mediaType) if successful and Left(errors) otherwise.

例如:

MediaType.parse("image/gif") // Right(MediaTypes.`image/gif`)

HttpEntity可以取一个ContentType。要从上面的 MediaType 得到一个 ContentType,你可以这样做:

val mediaTypeStr: String = ???

val mediaType: MediaType =
  MediaType.parse(mediaTypeStr).toOption.getOrElse(/*a fallback/default MediaType*/)

val entity = HttpEntity(ContentType(mediaType), ...)

有一种方法可以通过扩展获取媒体类型。

进口akka.http.scaladsl.model._

val mediaType: MediaType = MediaTypes.forExtension("png")