Prześlij obraz z Androida do serwletu Java i zapisz go
Szukałem tego wszystkiego i nic nie działało dla mnie.
Próbuję przesłać obraz z aplikacji Android do serwletu Java i zapisać go na serwerze. Każde znalezione przeze mnie rozwiązanie nie działało dla mnie.
Co aktualnie robi mój kod: aplikacja Android wysyła obraz do serwletu, kiedy próbuję go zapisać, plik jest tworzony, ale jest pusty :(
Dzięki za pomoc!
Mój kod w kliencie z Androidem (plik i_ to lokalizacja pliku na urządzeniu):
<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>
Mój kod po stronie serwera:
<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>
Kod 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>