I was looking for all this, and nothing worked for me.
I am trying to upload an image from an android application to a Java servlet and save it on the server. Every solution I found did not work for me.
Currently my code is: an Android app sends an image to the servlet, when I try to save it, the file is created, but it is empty :(
Thanks for your help!
My code in android client (i_file is the location of the file on the device):
public static void uploadPictureToServer(String i_file) throws ClientProtocolException, IOException { // TODO Auto-generated method stub HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); HttpPost httppost = new HttpPost("http://192.168.1.106:8084/Android_Server/GetPictureFromClient"); File file = new File(i_file); MultipartEntity mpEntity = new MultipartEntity(); ContentBody cbFile = new FileBody(file, "image/jpeg"); mpEntity.addPart("userfile", cbFile); httppost.setEntity(mpEntity); System.out.println("executing request " + httppost.getRequestLine()); HttpResponse response = httpclient.execute(httppost); HttpEntity resEntity = response.getEntity(); System.out.println(response.getStatusLine()); if (resEntity != null) { System.out.println(EntityUtils.toString(resEntity)); } if (resEntity != null) { resEntity.consumeContent(); } httpclient.getConnectionManager().shutdown(); }
My server side code is:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); InputStream in = request.getInputStream(); OutputStream out = new FileOutputStream("C:\\myfile.jpg"); IOUtils.copy(in, out);
IOUtils.copy Code:
public static long copy(InputStream input, OutputStream output) throws IOException { byte[] buffer = new byte[4096]; long count = 0L; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } return count; }
source share