package com.dayu.pipirrapp.net.upload;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.IOException;
|
|
import okhttp3.MediaType;
|
import okhttp3.RequestBody;
|
import okio.BufferedSink;
|
import okio.BufferedSource;
|
import okio.Okio;
|
|
/**
|
* ProgressRequestBody -
|
*
|
* @author zuoxiao
|
* @version 1.0
|
* @since 2024-11-28
|
*/
|
public class ProgressRequestBody extends RequestBody {
|
private File file;
|
private ProgressListener listener;
|
private MediaType mediaType;
|
|
public ProgressRequestBody(File file, ProgressListener listener, String mimeType) {
|
this.file = file;
|
this.listener = listener;
|
this.mediaType = MediaType.parse(mimeType);
|
}
|
|
@Override
|
public MediaType contentType() {
|
return mediaType;
|
}
|
|
@Override
|
public void writeTo(BufferedSink sink) throws IOException {
|
try (FileInputStream fileInputStream = new FileInputStream(file);
|
BufferedSource source = (BufferedSource) Okio.source(fileInputStream)) {
|
long totalBytes = file.length();
|
long bytesWritten = 0;
|
long read;
|
byte[] buffer = new byte[2048];
|
while ((read = source.read(buffer)) != -1) {
|
sink.write(buffer, 0, (int) read);
|
bytesWritten += read;
|
if (listener != null) {
|
listener.onProgress(bytesWritten, totalBytes);
|
}
|
}
|
}
|
}
|
}
|