[英]unable to get resolve Incomplete output stream error jclouds
嘗試使用swift放置對象時遇到異常:
org.jclouds.http.HttpResponseException: Incomplete output stream connecting to PUT http://xxx.xx.xx.xxx:8080/v1/AUTH_2c5c2fbbfe22422496d5ebf6861199f2/myContainer1/ HTTP/1.1
at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:162)
at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:93)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:76)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:47)
at here`org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:79)
at $Proxy66.put(Unknown Source)
at com.cis.app.Appxkl.JCloudsSwift.uploadObjectFromString(JCloudsSwift.java:194)
at com.cis.app.Appxkl.JCloudsSwift.main(JCloudsSwift.java:51)
Caused by: java.io.IOException: Incomplete output stream
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.invoke(JavaUrlHttpCommandExecutorService.java:112)
at org.jclouds.http.internal.JavaUrlHttpCommandExecutorService.invoke(JavaUrlHttpCommandExecutorService.java:72)
at org.jclouds.http.internal.BaseHttpCommandExecutorService.invoke(BaseHttpCommandExecutorService.java:141)
... 8 more
代碼是:
InputStream is = new ByteArrayInputStream(data.getBytes("UTF-8"));
Payload payload = new InputStreamPayload(is);
payload.getContentMetadata().setContentLength((long) 1000);
ObjectApi objectApi = swiftApi.objectApiInRegionForContainer("RegionOne", CONTAINER_NAME);
String str = "strName";
objectApi.put(str, payload);
請任何人指導我如何解決這個問題
您應提供正確的內容長度,而不是虛假的內容長度,例如,
byte[] input = data.getBytes("UTF-8");
InputStream is = new ByteArrayInputStream(input);
Payload payload = new InputStreamPayload(is);
payload.getContentMetadata().setContentLength(input.length);
您可以使用ByteArrayPayload
完全跳過InputStream
,該ByteArrayPayload
自動設置長度並提供可重復的有效載荷,該有效載荷可以處理網絡超時和其他故障:
byte[] input = data.getBytes("UTF-8");
Payload payload = new ByteArrayPayload(input);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.