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