Carregar imagem do android para o servlet java e salvá-lo
Eu estive procurando por tudo isso e nada funcionou para mim.
Estou tentando fazer upload de uma imagem do aplicativo android para o servlet java e salvá-lo no servidor. Todas as soluções que encontrei não funcionaram para mim.
O que meu código faz atualmente: o aplicativo android está enviando a imagem para o servlet, quando eu estou tentando salvá-lo o arquivo é criado, mas está vazio :(
Obrigado pela ajuda!
Meu código no cliente android (i_file é o local do arquivo no dispositivo):
<code>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(); } </code>
Meu código no lado do servidor:
<code>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); //The function is below out.flush(); out.close(); } </code>
Código 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; } </code>