Have you tried without the header "Expect: 100-Continue" ? HttpProtocolParams.setUseExpectContinue(client.getParams(), false);
-- Hubert On Wed, Dec 30, 2009 at 11:50 AM, Radek Skokan <[email protected]> wrote: > As you can see from the sniffed packets, the problem is not in > establishing network connection, but on a higher level: HTTP multipart > file upload using Apache HttpClient from Android SDK & Apache Commons > File Upload. > > Radek > > On 12/24/2009 11:11 PM, jotobjects wrote: >> 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 -- 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

