2014-09-22 68 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