アップロードの進行状況を知るために出力ストリームを拡張する次のクラスを使用しています。
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.http.entity.InputStreamEntity;
public class CountingInputStreamEntity extends InputStreamEntity {
private UploadListener listener;
private long length;
public CountingInputStreamEntity(InputStream instream, long length) {
super(instream, length);
this.length = length;
}
public void setUploadListener(UploadListener listener) {
this.listener = listener;
}
@Override
public void writeTo(OutputStream outstream) throws IOException {
super.writeTo(new CountingOutputStream(outstream));
}
class CountingOutputStream extends OutputStream {
private long counter = 0l;
private OutputStream outputStream;
public CountingOutputStream(OutputStream outputStream) {
this.outputStream = outputStream;
}
@Override
public void write(int oneByte) throws IOException {
this.outputStream.write(oneByte);
counter++;
if (listener != null) {
int percent = (int) ((counter * 100)/ length);
listener.onChange(percent);
}
}
}
public interface UploadListener {
public void onChange(int percent);
}
}
呼び出しクラス:
final HttpResponse resp;
final HttpClient httpClient = new DefaultHttpClient();
final HttpPost post = new HttpPost(UPLOAD_URL);
ParcelFileDescriptor fileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
InputStream in = context.getContentResolver().openInputStream(uri);
CountingInputStreamEntity entity = new CountingInputStreamEntity(in, fileDescriptor.getStatSize());
entity.setListener(this);
post.setEntity(entity);
resp = httpClient.execute(post);
デフォルトでは、write メソッドの len 変数は 2048 バイトを返します。len 変数をカスタム値に変更する方法はありますか。len 変数を 64kb にしたいのですが、どうすればこれを達成できますか。誰でも問題の解決に役立ちます。
サーバーへの書き込みバイト数を増やすことはできますか?