Couchdb通过Httpclient上传图片

我用couchdb构build一个Android应用程序,我试图用这个函数将图像上传到couchdb文件:

  public JSONObject uploadPicture(PutAttachment putAttachment) { JSONObject obj = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPut httpPut = new HttpPut(baseUrl() + putAttachment.getDbName() + "/" + putAttachment.getDocName() + "/attachment?rev=" + putAttachment.getRev()); ByteArrayEntity img = new ByteArrayEntity(putAttachment.getByteImg()); httpPut.setEntity(img); httpPut.setHeader("Content-Length", "" + (int) img.getContentLength()); httpPut.setHeader("Content-type", "image/png"); httpPut.setHeader(authenticate()); HttpResponse response; response = httpclient.execute(httpPut); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); obj = new JSONObject(convertStreamToString(instream)); instream.close(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } return obj; } 

而我不知道为什么,但每次我得到ClientProtocolException

 httpclient.execute(httpPut). 

有人知道

今天我挣扎着。 研究了这个: 如何把图像附件在Android的CouchDB?

最后我得到了这样的东西:

 public static HttpResponse makeUpdateRequest(String uri, Bitmap bmp) { try { HttpPut httpPut = new HttpPut(uri); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 0, stream); ByteArrayEntity entity = new ByteArrayEntity(stream.toByteArray()); entity.setContentType("image/png"); entity.setChunked(true); httpPut.setEntity(entity); return new DefaultHttpClient().execute(httpPut); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } 

并以流行的方式称呼它:

  HttpResponse updateResponse = makeUpdateRequest( AppConfig.WEB_SERVER_DB_URI + uuid + "/attachment?rev=" + revId, bmp); 

这是一个很好的阅读: http : //wiki.apache.org/couchdb/HTTP_Document_API#Inline_Attachments