gpt4 book ai didi

java - 在 REST 响应中发送图像时请求 header 太大

转载 作者:行者123 更新时间:2023-12-01 07:20:31 25 4
gpt4 key购买 nike

我有一个使用 Spring Boot 开发的 REST 服务,该服务尝试将图像数据发送回客户端,然后将其显示在浏览器中。但是,当我尝试这样做时,出现以下错误:

2016-09-26 08:40:31.897  INFO 6435 --- [nio-8080-exec-7] o.a.coyote.http11.Http11NioProcessor     : Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Request header is too large
at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:111) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:267) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1013) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_60]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_60]

我的服务代码如下:

    @RequestMapping(method = RequestMethod.POST, value = "/com")
public String handleCompare(@RequestParam("testid") String test,
RedirectAttributes redirectAttributes, Model model) throws IOException {

File f=new File("Sampletest.jpg");
BufferedImage origImg=ImageIO.read(f);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(origImg, "jpg", baos );
byte[] imageInByte=baos.toByteArray();
byte[] encoded= Base64.encodeBase64(imageInByte);
String encodedString = new String(encoded);
model.addAttribute("webcamattr", encodedString);
return "resp";
}

“resp.html”的相关部分如下:

   <table>
<tr>
<td align="center"><b>Response Image</b></td>
</tr>
<tr th:each="webfile : ${webcamattr}">
<td> <img width="300" height="300" src="data:image/jpeg;base64" th:src="${webcamattr}"></img></td>
</tr>
</table>

我的application.properties文件如下:

multipart.maxFileSize=10Mb
multipart.maxRequestSize=10Mb

我尝试发送的文件大小只有 19KB,但我不确定为什么它会抛出一个大的请求 header 错误。您能帮助确定我做错了什么吗?请求头中是否传递了图像数据?如果是这样,我如何在响应正文中发送它?

谢谢

最佳答案

您在哪个应用程序服务器上运行它?您缺少 http-listener 下的 maxPostSize 属性。

如果您使用 Tomcat,可以通过以下方式实现:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" **maxHttpHeaderSize="65536" maxPostSize="4194304"**
URIEncoding="UTF-8"/>

如果服务器由 Spring Boot 管理,请尝试将这些添加到您的 application.properties 中:

spring.http.multipart.max-file-size=1Mb # Max file size
spring.http.multipart.max-request-size=10Mb # Max request size

关于java - 在 REST 响应中发送图像时请求 header 太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39707595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com