【问题标题】:Include text header in Image HTTP response Jetty在图像 HTTP 响应 Jetty 中包含文本标头
【发布时间】:2019-09-30 21:30:24
【问题描述】:

我正在构建一个简单的服务器程序,它需要在响应中返回图像和一些文本,但是,我遇到了 Jetty 的问题。文本应该包含在 HTTP 响应的标头中,但不是。

这是返回图像的代码:

override fun doPost(request: HttpServletRequest, response: HttpServletResponse) {
    response.contentType = "image/png"
    response.status = HttpServletResponse.SC_OK
    val diff = ImgDiff.getDifference("img1", "img2", tolerance)
    //response.writer.println(diff.toString())
    ImageIO.write(ImageIO.read(File("diffedFile.png")), "PNG", response.outputStream)
    response.addHeader("diff", diff.toString())
}

这很好用,但是标头不包含差异。当我使用注释掉 ImageIO 行并取消注释它上面的那一行时,已经注释掉的那一行,并将内容类型更改为text/plain diff 包含在标题中。

带有图片的标题:

Date: Mon, 13 May 2019 22:03:35 GMT
Content-Type: image/png
Transfer-Encoding: chunked
Server: Jetty(9.4.18.v20190429)

没有图像的标题(如后一种情况所述)

Date: Mon, 13 May 2019 22:10:32 GMT
Content-Type: text/plain;charset=iso-8859-1
diff: 62.62626262626263
Content-Length: 19
Server: Jetty(9.4.18.v20190429)

我在 Jetty 上做错了吗? HTTP 响应图像可以不包含图像吗?我意识到我可以只返回一个包含图像和文本的 zip 文件,但我认为这有点多。我是否忽略了 HTTP 请求的基本内容?请告诉我。

【问题讨论】:

  • 您可以先尝试添加标头,然后再写入响应吗?也许我错了,但值得一试
  • 这就是我最终所做的。希望我以前看过你的评论。

标签: http servlets kotlin jetty httpresponse


【解决方案1】:

如果我在将图像打印到流中之前添加标题似乎可以工作。

override fun doPost(request: HttpServletRequest, response: HttpServletResponse) {
    response.contentType = "image/png"
    response.status = HttpServletResponse.SC_OK
    val diff = ImgDiff.getDifference("img1", "img2", tolerance)
    response.addHeader("diff", diff.toString())
    ImageIO.write(ImageIO.read(File("diffedFile.png")), "PNG", response.outputStream)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-25
    • 2023-03-16
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2011-11-18
    相关资源
    最近更新 更多