Android上的MultiPart上传图像进度

时间:2013-07-17 20:23:59

标签: java android

我正在尝试使用下面提到的方法在我的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);
}



}

我将图像添加到multipart ByteArrayBody,如下所示

reqEntity.addPart("image", bab);

问题是我只在整个图像上传时才看到进度更新。 我希望在上传数据块时取得进展。

非常感谢任何帮助

非常感谢

马南

2 个答案:

答案 0 :(得分:1)

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

您可以将out.write(b, off, len)次呼叫分成多个较小的呼叫,但速度稍慢。

答案 1 :(得分:1)

想出问题是因为我使用的是ByteArrayBody,它不会以块的形式发送文件而是立即写入整个流。 使用FileBody来解决问题。