public class CountingFileRequestBody extends RequestBody {
private static final int SEGMENT_SIZE = 2048; // okio.Segment.SIZE
private final File file;
private final ProgressListener listener;
private final String contentType;
public CountingFileRequestBody(File file, String contentType, ProgressListener listener) {
this.file = file;
this.contentType = contentType;
this.listener = listener;
}
@Override
public long contentLength() {
return file.length();
}
@Override
public MediaType contentType() {
return MediaType.parse(contentType);
}
@Override
public void writeTo(BufferedSink sink) throws IOException {
Source source = null;
try {
source = Okio.source(file);
long total = 0;
long read;
while ((read = source.read(sink.buffer(), SEGMENT_SIZE)) != -1) {
total += read;
sink.flush();
this.listener.transferred(total);
}
} finally {
Util.closeQuietly(source);
}
}
public interface ProgressListener {
void transferred(long num);
}
}
Я видел приведенный выше код для получения прогресса загрузки файла ... И код используется следующим образом
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addPart(
Headers.of("Content-Disposition", "form-data; name=\"image\"; filename=\"" + file.getName() + "\""),
new CountingFileRequestBody(file, "image/*", new CountingFileRequestBody.ProgressListener() {
@Override
public void transferred(long num) {
float progress = (num / (float) totalSize) * 100;
uploadData.progressValue = (int) progress;
handler.post(new Runnable() {
@Override
public void run() {
updateProgressBar(tempId);
}
});
}
})
)
.build();
Request request = new Request.Builder()
.tag(tempId)
.url(Constants.BASE_URL + apiPath)
.post(requestBody)
.build();
Но код работает только для загрузки одного файла, я все еще плохо знакомы с JAVA, поэтому я не знаю, как изменить код, чтобы он подходил для загрузки нескольких файлов ...
Ниже приведен мой код для загрузки файлов
MultipartBody.Builder multipartBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
for (int g = 0; g < fileLists.size(); g++){
File file = fileLists.get(g);
multipartBody.addFormDataPart("files[]", file.getName(), RequestBody.create(MediaType.parse("*/*"), file));
}
multipartBody.addFormDataPart("lang", lang)
.addFormDataPart("user", myIDtoString)
.addFormDataPart("post", postText);
RequestBody requestBody = multipartBody.build();
Request request = new Request.Builder()
.url(Constants.submitPostUrl)
.post(requestBody)
.build();
Пожалуйста, Как я могу изменить код класса Java, чтобы он соответствовал моему коду загрузки