如何使用Apache HttpClient Library通过https发送文件?

时间:2014-09-22 15:13:44

标签: apache https httpclient multipart eofexception

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

  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)         在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)         在org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)         在javax.servlet.http.HttpServlet.service(HttpServlet.java:707)         在javax.servlet.http.HttpServlet.service(HttpServlet.java:790)         在org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)         在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)

1 个答案:

答案 0 :(得分:0)

好的,我想出来并希望发布答案以防其他人遇到此问题。问题是在所有文件都可以读取之前,流已经过早关闭。这是因为我在抓住下一个文件之前一次抓取一个文件并对文件进行处理。显然,https连接不够稳定,无法做到这一点。我猜测,由于它是安全的传输,因此流不会长时间保持。