【发布时间】:2019-09-26 14:14:35
【问题描述】:
我有一个 java web 应用程序,它使用 Apache Commons FileUpload 来使用 servlet 上传文件。
我的基本代码在普通的 http 环境 (Apache Tomcat 8.5) 上完美运行多年。
我已更改我的环境以使用 HTTPS,使用通过 org.apache.coyote.http11.Http11AprProtocol 配置的连接器使用 Let's Encrypt 证书。
如果文件大于 100kb,我的上传现在会突然失败。使用纯 HTTP 环境成功上传相同的文件。
这是记录的异常:
org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. java.io.IOException: The socket [925,024,592] associated with this connection has been closed.
这是我用于管理请求的代码片段:
DiskFileItemFactory factory = new DiskFileItemFactory();
File repository = (File)
request.getServletContext().getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(encoding);
multipartItems = upload.parseRequest(request);
Tomcat 设置:
<Connector
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
/>
<Connector
port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate
certificateKeyFile="D:/prj/certificati/private.key"
certificateFile="D:/prj/certificati/certificate.crt"
certificateChainFile="D:/prj/certificati/ca_bundle.crt"
type="RSA"
/>
</SSLHostConfig>
</Connector>
我研究过这个问题,很少有案例,没有解决方案。
谢谢
【问题讨论】:
标签: tomcat servlets https apache-commons-fileupload