0

我正在尝试使用下面提到的方式在我的 Android 客户端上显示上传进度

MultipartEntity reqEntity = new MultipartEntity(){
                @Override
                public void writeTo(final OutputStream outstream) throws IOException {
                    super.writeTo(new UploadOutputStream(outstream,listener));
                }

            };

public class UploadOutputStream extends FilterOutputStream {

private final ProgressListener listener;
private long transferred;

public UploadOutputStream(final OutputStream out, final ProgressListener listener)
{
    super(out);
    this.listener = listener;
    this.transferred = 0;
}

public void write(byte[] b, int off, int len) throws IOException
{
    out.write(b, off, len);
    this.transferred += len;
    this.listener.transferred(this.transferred);
}

public void write(int b) throws IOException
{
    out.write(b);
    this.transferred++;
    this.listener.transferred(this.transferred);
}



}

我将图像添加到多部分 ByteArrayBody 如下

reqEntity.addPart("image", bab);

问题是我只有在整个图像上传后才能看到进度更新。我想要上传块时的进度。

任何帮助是极大的赞赏

非常感谢

马南

4

2 回答 2

1

我认为这不是多部分编码的问题。最有可能的是,HTTP 客户端通过发送单个write()调用来优化写入,因为它知道大小并且适合其缓冲区。此调用很可能会阻塞,然后您的侦听器会立即执行。

您可以将该out.write(b, off, len)呼叫拆分为多个较小的呼叫,但会稍微牺牲速度。

于 2013-07-17T20:54:21.250 回答
1

发现问题是因为我使用的 ByteArrayBody 不会以块的形式发送文件,而是一次写入整个流。使用 FileBody 解决问题。

于 2013-07-18T00:39:07.980 回答