我正在构建一个端点,该端点借助Akka HTTP返回图像。我从AWS S3以ByteString
的流的形式获取图像。每个图像都有自己的MediaType
(image/gif
,image/png
,...)
当我们具有媒体类型字符串表示形式时,如何构造具有特定媒体类型的HttpResponse实体?
HttpResponse(StatusCodes.OK, entity = HttpEntity(image))
答案 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>)