2014-09-22 69 views
0

我最近在我的服务器上安装了一个ssl证书,并在客户端程序中切换了url以使用url的https版本。现在,由于某种原因,在向服务器发送文件时,多部分请求中发送的参数不在请求中。但有时他们正在请求,但是多部分请求中的文件似乎已损坏,并且在读取文件时出现EOFException。这真的很奇怪。我使用Apache的HttpClient库将文件发送到服务器。有谁知道这可能是什么?下面是试图反序列化的文件时,我发现了服务器上的错误:如何使用Apache HttpClient Library通过https发送文件?

java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794) 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299) 
    at com.jgy.genserver.service.CreateDomainsAndDaosImpl.deserializeObject(CreateDomainsAndDaosImpl.java:741) 
    at com.jgy.genserver.service.CreateDomainsAndDaosImpl.createDomainsAndDaos(CreateDomainsAndDaosImpl.java:70) 
    at com.jgy.genserver.controller.CreationController.uploadFile(CreationController.java:199) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:61 

7) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter。的java:578) 在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework.web.servlet.FrameworkServlet.processRequest(Framewo rkServlet.java:882) at javax.servlet。javax.servlet.http.HttpServlet.service(HttpServlet.java:707) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 。 http.HttpServlet.service(HttpServlet.java:790) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 318) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)

回答

0

好的,我想通它出来,并希望张贴答案,以防其他人来了跨越这个问题。问题在于,在所有文件都可以被读取之前,流被提前关闭。这是因为我在抓取下一个文件之前一次抓取一个文件并对文件进行处理。很明显,https连接不够稳定。我猜测,因为这是一个安全的传输,流不会很长时间。

+0

只是对答案的更新。即使在更改代码以立即从请求中获取所有文件之后,我仍然遇到同样的问题。所以我环顾四周,找到了一个使用httpclient库发送多部分请求的例子。我编写的代码没有使用最新的组件,因此我在代码中将httpclient组件切换为代码中来自此apache示例的最新httpclient组件:https:// hc。 apache.org/httpcomponents-client-ga/httpmime/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java – user2488184 2014-09-25 05:14:04

+0

修复了它! – user2488184 2014-09-25 05:17:51