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

时间:2018-08-16 09:20:05

标签: scala akka akka-http

我正在构建一个端点,该端点借助Akka HTTP返回图像。我从AWS S3以ByteString的流的形式获取图像。每个图像都有自己的MediaTypeimage/gifimage/png,...)

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

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

3 个答案:

答案 0 :(得分:2)

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

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

尝试从给定的String解析 MediaType 值。如果成功,则返回 Right(mediaType),否则返回 Left(错误)

例如:

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

HttpEntity可以使用ContentType。要从上面的ContentType中获取一个MediaType,可以执行以下操作:

val mediaTypeStr: String = ???

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

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

答案 1 :(得分:1)

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

导入akka.http.scaladsl.model ._

val mediaType:MediaType = MediaTypes.forExtension(“ png”)

答案 2 :(得分:0)

您可以使用-

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