Включить текстовый заголовок в ответ HTTP Image Jetty - PullRequest
1 голос
/ 14 мая 2019

Я создаю простую серверную программу, которая должна возвращать в ответе изображение и текст, однако у меня проблема с 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())
}

Это прекрасно работает, однако, заголовок не содержит diff. Когда я использую закомментируйте строку 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-запросов? Пожалуйста, дайте мне знать.

1 Ответ

1 голос
/ 14 мая 2019

Кажется, что это работает, если я добавляю заголовки, прежде чем напечатать изображение в поток.

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