Android HTTP upload progress for UrlEncodedFormEntity

前端 未结 1 1980
闹比i
闹比i 2021-01-07 04:46

There are several questions discussing ways in which progress indication can be added to HTTP file uploads in Android using the multipart/form-data data format. The typical

相关标签:
1条回答
  • 2021-01-07 05:37

    You can override the #writeTo method of any HttpEntity implementation and count bytes as they get written to the output stream.

    DefaultHttpClient httpclient = new DefaultHttpClient();
    try {
       HttpPost httppost = new HttpPost("http://www.google.com/sorry");
    
       MultipartEntity outentity = new MultipartEntity() {
    
        @Override
        public void writeTo(final OutputStream outstream) throws IOException {
            super.writeTo(new CoutingOutputStream(outstream));
        }
    
       };
       outentity.addPart("stuff", new StringBody("Stuff"));
       httppost.setEntity(outentity);
    
       HttpResponse rsp = httpclient.execute(httppost);
       HttpEntity inentity = rsp.getEntity();
       EntityUtils.consume(inentity);
    } finally {
        httpclient.getConnectionManager().shutdown();
    }
    
    static class CoutingOutputStream extends FilterOutputStream {
    
        CoutingOutputStream(final OutputStream out) {
            super(out);
        }
    
        @Override
        public void write(int b) throws IOException {
            out.write(b);
            System.out.println("Written 1 byte");
        }
    
        @Override
        public void write(byte[] b) throws IOException {
            out.write(b);
            System.out.println("Written " + b.length + " bytes");
        }
    
        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            out.write(b, off, len);
            System.out.println("Written " + len + " bytes");
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题