PartMap allein könnte für mehrteilige ausreichen. partmap Verwendung
@Multipart
@POST("api/registration")
Call<UserDetails> registerUser (@Header("Content-Length") long contentLength, @PartMap Map<String, RequestBody> params);
Sie eine Requestody erstellen Datei wie
RequestBody.create(MediaType.parse("image/*"), file);
und fügen Sie es zu halten.
Map<String, RequestBody> params;
// Erstellen und fügen Sie alle Arten von Anfragen zu dieser Karte hinzu. könnten Sie die Inhaltslänge berechnen, indem
long contentLength = 0;
Iterator iterator = params.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry pair = (Map.Entry)iterator.next();
try {
contentLength = contentLength + ((RequestBody)pair.getValue()).contentLength();
} catch (IOException e) {
e.printStackTrace();
}
}
. Wenn Sie den Fortschritt des Datei-Uploads verfolgen möchten, können Sie das RequestBody erweitern, um Informationen über den Fortschritt zu erhalten.
public class ProgressRequestBody extends RequestBody {
private File file;
private ProgressListener listener;
private int DEFAULT_BUFFER_SIZE = 4084;
@Override
public MediaType contentType() {
return MediaType.parse("image/*");
}
//The constructor
public ProgressRequestBody(final File file, final ProgressListener listener) {
this.file = file;
this.listener = listener;
}
//The method to overide
@Override
public void writeTo(BufferedSink sink) throws IOException {
long fileLength = file.length();
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
FileInputStream in = new FileInputStream(file);
long total = 0;
try {
int read;
while ((read = in.read(buffer)) != -1) {
this.listener.onProgress(total, fileLength);
total += read;
sink.write(buffer, 0, read);
}
} finally {
in.close();
}
}
//A simple callback
public interface ProgressListener {
void onProgress(final long current, final long max);
}
}
und es verwenden, um die Datei wie
public static RequestBody toImageRequestBody(File file, ProgressListener progressListener) {
ProgressRequestBody progressRequestBody = new ProgressRequestBody(file, progressListener);
return progressRequestBody;
}
Halten Sie es als Bonus zu wickeln;)
Teilen Sie Ihre Log-Katze – SaravInfern