Apparently your HTC is able to connect over WIFI to your router and
find a local network laptop running the servlet.

Have you tried having the emulator running on the laptop connect to
localhost using port 10.0.2.2?  That could at least establish that the
code works (or not) in that situation.  See this link:

http://developer.android.com/intl/zh-CN/resources/faq/commontasks.html#localhostalias

On Dec 23, 10:38 pm, Radek Skokan <[email protected]> wrote:
> I tried it on both the emulator and a physical device (HTC Hero). Same
> behavior.
> 192.168.1.100 is my laptop running Tomcat. There is a servlet with
> Apache Commons File upload waiting for that multipart file. Works
> correctly with uploads from a browser (PC & Android).
>
> Thanks,
> R.
>
> On 12/23/2009 10:56 PM, jotobjects wrote:
>
> > Are you running this on the emulator?
>
> > Is 192.168.1.100 a different computer on the same router?
>
> > On Dec 22, 4:51 am, Radek Skokan<[email protected]>  wrote:
>
> >> Hi,
>
> >> I'm trying to upload a file from Android to Tomcat server using
> >> HttpClient and HttpPost. The android-side code is:
>
> >>                          HttpClient client = new DefaultHttpClient();
> >>                          
> >> client.getParams().setParameter("http.socket.timeout", new Integer
> >> (90000)); // 90 second
> >>                          HttpPost httpPost = new 
> >> HttpPost("http://192.168.1.100:8080/
> >> mediator/upload");
> >>                          FileEntity entity = new FileEntity(new 
> >> File(filePath), "binary/
> >> octet-stream");
> >>                          httpPost.setEntity(entity);
> >>                          HttpResponse response = client.execute(httpPost);
> >>                          Log.i(TAG, "Upload finished. Status: " + 
> >> response.getStatusLine());
> >>                          client.getConnectionManager().shutdown();
>
> >> The result always is "HTTP/1.1 400 Bad Request".
>
> >> I captured the data sent over the network and it looks like:
>
> >>> POST /mediator/upload HTTP/1.1
> >>> Content-Length: 8287
> >>> Content-Type: binary/octet-stream
> >>> Host: 192.168.1.100:8080
> >>> Connection: Keep-Alive
> >>> User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
> >>> Expect: 100-Continue
>
> >> <  HTTP/1.1 100 Continue
>
> >> <  HTTP/1.1 400 Bad Request
> >> <  Server: Apache-Coyote/1.1
> >> <  Content-Type: text/html;charset=UTF-8
> >> <  Content-Length: 971
> >> <  Date: Tue, 22 Dec 2009 12:14:47 GMT
> >> <  Connection: close
>
> >> I created a simple HTML form for POSTing a file. This works fine from
> >> browser and the data is different:
> >> 1) it doesn't use HTTP 100 continue
> >> 2) Content-Type: multipart/form-data; boundary=----
> >> WebKitFormBoundaryDlIVGYpQG46Q46So
>
> >> In my client I tried to change the content type to other values than
> >> "binary/octet-stream", but when I sniff the traffic, the binary/octet-
> >> stream is still there.
>
> >> I do this on HTC Here/SDK 1.5.
>
> >> Thanks,
> >> Radek
>
> >> On Nov 15, 11:46 am, rezar<[email protected]>  wrote:
>
> >>> I solved the problem. I post my code here for others to have a working
> >>> sample:
> >>> on the server side I made a simple servlet:
> >>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >>> private void receiveFile(HttpServletRequest req, HttpServletResponse
> >>> resp) throws Exception {
> >>>                  Enumeration emns = req.getHeaderNames();
> >>>                  InputStream is = req.getInputStream();
> >>>                  OutputStream os = new 
> >>> FileOutputStream(req.getHeader(FILENAME_STR));
> >>>                  byte[] buffer = new byte[4096];
> >>>                  int bytesRead;
> >>>                  while ((bytesRead = is.read(buffer)) != -1) {
> >>>                    os.write(buffer, 0, bytesRead);
> >>>                  }
> >>>                  is.close();
> >>>                  os.close();
> >>>          }
> >>> protected void doPost(HttpServletRequest request,HttpServletResponse
> >>> response) throws ServletException, IOException {
> >>>                  try {
> >>>                          receiveFile(request,response);
> >>>                  } catch (Exception e) {
> >>>                          
> >>> System.err.println("------------ERROR---------"+e.getMessage());
> >>>                          e.printStackTrace();
> >>>                  }
> >>>          }
> >>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >>> At the android side (SDK v.2.0 ):
> >>> private HttpPost post;
> >>> public void doUpload(String filepath,String filename) {
> >>>                  HttpClient httpClient = new DefaultHttpClient();
> >>>                  try {
> >>>                          
> >>> httpClient.getParams().setParameter("http.socket.timeout", new
> >>> Integer(90000)); // 90 second
> >>>                          post = new HttpPost(new 
> >>> URI(YOUR_SERVER_ADDRESS));
> >>>                          File file = new File(filepath);
> >>>                          FileEntity entity;
> >>>                          if (filepath.substring(filepath.length()-3, 
> >>> filepath.length
> >>> ()).equalsIgnoreCase("txt") ||
> >>>                                  filepath.substring(filepath.length()-3, 
> >>> filepath.length
> >>> ()).equalsIgnoreCase("log")) {
> >>>                                  entity = new 
> >>> FileEntity(file,"text/plain; charset=\"UTF-8\"");
> >>>                                  entity.setChunked(true);
> >>>                          }else {
> >>>                                  entity = new 
> >>> FileEntity(file,"binary/octet-stream");
> >>>                                  entity.setChunked(true);
> >>>                          }
> >>>                          post.setEntity(entity);
> >>>                          post.addHeader(FILENAME_STR, filename);
>
> >>>                          HttpResponse response = httpClient.execute(post);
> >>>                          if (response.getStatusLine().getStatusCode() != 
> >>> HttpStatus.SC_OK) {
> >>>                                  Log.e(TAG,"--------Error--------Response 
> >>> Status line
> >>> code:"+response.getStatusLine());
> >>>                          }else {
> >>>                                  // Here every thing is fine.
> >>>                          }
> >>>                          HttpEntity resEntity = response.getEntity();
> >>>                          if (resEntity == null) {
> >>>                                  Log.e(TAG,"---------Error No Response 
> >>> !!!-----");
> >>>                          }
> >>>                  } catch (Exception ex) {
> >>>                          Log.e(TAG,"---------Error-----"+ex.getMessage());
> >>>                          ex.printStackTrace();
> >>>                  } finally {
> >>>                            httpClient.getConnectionManager().shutdown();
> >>>                  }
> >>>          }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to