【问题标题】:How to set MediaType for HttpResponse in Akka Http?如何在 Akka Http 中为 HttpResponse 设置 MediaType?
【发布时间】:2018-08-16 19:19:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: scala akka akka-http


    【解决方案1】:

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

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

    尝试从给定的字符串中解析 MediaType 值。如果成功则返回 Right(mediaType),否则返回 Left(errors)

    例如:

    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), ...)
    

    【讨论】:

      【解决方案2】:

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

      导入 akka.http.scaladsl.model._

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

      【讨论】:

        【解决方案3】:

        你可以使用 -

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

        【讨论】:

        • 这仅在所有图像具有相同MediaType 的情况下才正确。但我至少有 3 个MediaTypes。那么问题是如何从String值动态创建MediaType
        猜你喜欢
        • 2022-01-15
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        • 2017-06-28
        • 2010-10-16
        • 1970-01-01
        • 1970-01-01
        • 2017-08-31
        相关资源
        最近更新 更多