我正在尝试使用下面提到的方法在我的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);
问题是我只在整个图像上传时才看到进度更新。 我希望在上传数据块时取得进展。
非常感谢任何帮助
非常感谢
马南
答案 0 :(得分:1)
我不认为这是多部分编码的问题。最有可能的是,HTTP客户端通过发送单个write()
调用来优化写入,因为它知道大小并且它适合其缓冲区。此调用很可能是块,并且在此之后立即执行您的侦听器。
您可以将out.write(b, off, len)
次呼叫分成多个较小的呼叫,但速度稍慢。
答案 1 :(得分:1)
想出问题是因为我使用的是ByteArrayBody,它不会以块的形式发送文件而是立即写入整个流。 使用FileBody来解决问题。