package com.dayu.pipirrapp.net.upload;
|
|
import java.io.IOException;
|
|
import okhttp3.MediaType;
|
import okhttp3.RequestBody;
|
import okio.Buffer;
|
import okio.BufferedSink;
|
import okio.ForwardingSink;
|
import okio.Okio;
|
import okio.Sink;
|
|
/**
|
* ProgressRequestBody -
|
*
|
* @author zuoxiao
|
* @version 1.0
|
* @since 2024-11-28
|
*/
|
public class ProgressRequestBody extends RequestBody {
|
private final RequestBody requestBody;
|
private final ProgressListener progressListener;
|
|
public ProgressRequestBody(RequestBody requestBody, ProgressListener progressListener) {
|
this.requestBody = requestBody;
|
this.progressListener = progressListener;
|
}
|
|
@Override
|
public MediaType contentType() {
|
return requestBody.contentType();
|
}
|
|
@Override
|
public long contentLength() throws IOException {
|
return requestBody.contentLength();
|
}
|
|
@Override
|
public void writeTo(BufferedSink sink) throws IOException {
|
Sink progressSink = new ForwardingSink(sink) {
|
long totalBytesWritten = 0;
|
|
@Override
|
public void write(Buffer source, long byteCount) throws IOException {
|
super.write(source, byteCount);
|
totalBytesWritten += byteCount;
|
if (progressListener != null) {
|
progressListener.onProgress(totalBytesWritten, contentLength(),false);
|
}
|
}
|
};
|
BufferedSink bufferedSink = Okio.buffer(progressSink);
|
requestBody.writeTo(bufferedSink);
|
bufferedSink.flush();
|
}
|
|
|
}
|