我正在尝试将拍摄的照片上传到服务器.这是我做的:
public JSONObject makePostFileRequest(String url, String photoFile) { try { // photoFile = /path/tofile/pic.jpg DefaultHttpClient httpClient = GlobalData.httpClient; HttpPost httpPost = new HttpPost(url); File file = new File(photoFile); FileBody fileBody = new FileBody(file); // here is line 221 MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("PhotoMessage", fileBody); httpPost.setEntity(multipartEntity.build()); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent();
我收到此错误:
11-29 13:12:14.924:E/AndroidRuntime(15781):引起:java.lang.NoClassDefFoundError:org.apache.http.entity.ContentType 11-29 13:12:14.924:E/AndroidRuntime(15781):在org.apache.http.entity.mime.content.FileBody.(FileBody.java:89)11-29 13:12:14.924:E/AndroidRuntime(15781):at com.petcial.petopen.custom.JSONParser.makePostFileRequest (JSONParser.java:221)
我究竟做错了什么?
更新
InputStream inputStream; inputStream = new FileInputStream(new File(photoFile)); byte[] data; data = IOUtils.toByteArray(inputStream); httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, System.getProperty("http.agent")); InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "Pic.jpg"); MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("PhotoMessage", inputStreamBody); httpPost.setEntity(multipartEntity.build()); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent();
这是错误:
11-29 14:00:33.364:E/AndroidRuntime(19478):引起:java.lang.NoClassDefFoundError:org.apache.http.util.Args 11-29 14:00:33.364:E/AndroidRuntime(19478):在org.apache.http.entity.mime.content.AbstractContentBody.(AbstractContentBody.java:48)11-29 14:00:33.364:E/AndroidRuntime(19478):at org.apache.http.entity.mime.content .InputStreamBody.(InputStreamBody.java:69)11-29 14:00:33.364:E/AndroidRuntime(19478):at org.apache.http.entity.mime.content.InputStreamBody.(InputStreamBody.java:62)11- 29 14:00:33.364:E/AndroidRuntime(19478):at com.petcial.petopen.custom.JSONParser.makePostFileRequest(JSONParser.java:233)
这些库解决了我的问题:
在Order and Export选项卡中检查该jar并运行.
有我的工作解决方案,使用apache http库发送带有post的图像(这里非常重要的是边界添加它在我的连接中没有它将无法工作):
ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); byte[] imageBytes = baos.toByteArray(); HttpClient httpclient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(StaticData.AMBAJE_SERVER_URL + StaticData.AMBAJE_ADD_AMBAJ_TO_GROUP); String boundary = "-------------" + System.currentTimeMillis(); httpPost.setHeader("Content-type", "multipart/form-data; boundary="+boundary); ByteArrayBody bab = new ByteArrayBody(imageBytes, "pic.png"); StringBody sbOwner = new StringBody(StaticData.loggedUserId, ContentType.TEXT_PLAIN); StringBody sbGroup = new StringBody("group", ContentType.TEXT_PLAIN); HttpEntity entity = MultipartEntityBuilder.create() .setMode(HttpMultipartMode.BROWSER_COMPATIBLE) .setBoundary(boundary) .addPart("group", sbGroup) .addPart("owner", sbOwner) .addPart("image", bab) .build(); httpPost.setEntity(entity); try { HttpResponse response = httpclient.execute(httpPost); ...then reading response