UploadDataProvider

abstract class UploadDataProvider : Closeable


Abstrakte Klasse, mit der der Einbettungscode einen Upload-Body für UrlRequest bereitstellen kann. Sie unterstützt sowohl nicht aufgeteilte (Größe im Voraus bekannt) als auch aufgeteilte (Größe nicht im Voraus bekannt) Uploads. Beachten Sie, dass nicht alle Server aufgeteilte Uploads unterstützen.

Ein Upload ist entweder immer aufgeteilt, über mehrere Uploads hinweg, wenn die Daten mehr als einmal gesendet werden, oder nie aufgeteilt.

Zusammenfassung

Öffentliche Konstruktoren

Öffentliche Funktionen

Unit

Wird aufgerufen, wenn dieser UploadDataProvider nicht mehr für eine Anfrage benötigt wird, damit Ressourcen (z. B. eine Datei) explizit freigegeben werden können.

abstract Long

Gibt bei einem nicht aufgeteilten Upload die Länge des Uploads zurück.

abstract Unit
read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!)

Liest Upload-Daten in byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

Setzt die Upload-Daten an den Anfang zurück.

Öffentliche Konstruktoren

UploadDataProvider

UploadDataProvider()

Öffentliche Funktionen

Schließen

fun close(): Unit

Wird aufgerufen, wenn dieser UploadDataProvider nicht mehr für eine Anfrage benötigt wird, damit Ressourcen (z. B. eine Datei) explizit freigegeben werden können.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. Dadurch schlägt die Anfrage fehl, wenn sie noch nicht abgeschlossen ist. Andernfalls wird sie protokolliert.

getLength

abstract fun getLength(): Long

Gibt bei einem nicht aufgeteilten Upload die Länge des Uploads zurück. Muss bei einem aufgeteilten Upload immer -1 zurückgeben.

Gibt Folgendes zurück:
Long

die Länge des Uploads für nicht aufgeteilte Uploads, andernfalls -1.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist.

Lesen

abstract fun read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!): Unit

Liest Upload-Daten in byteBuffer. Nach Abschluss wird die Position des Puffers auf das Ende der gelesenen Bytes aktualisiert. Das Limit des Puffers wird nicht geändert. Auf jeden Aufruf dieser Methode muss ein einzelner Aufruf von uploadDataSink folgen, entweder synchron oder asynchron: onReadSucceeded bei Erfolg oder onReadError bei Fehler. Weder „Lesen“ noch „Zurückspulen“ werden aufgerufen, bis eine dieser Methoden aufgerufen wird. Auch wenn die zugehörige UrlRequest abgebrochen wird, muss eine der beiden Methoden aufgerufen werden, bevor Ressourcen sicher freigegeben werden können. Wenn eine Ausnahme ausgelöst wird, werden auch Ressourcen freigegeben und die Anfrage schlägt fehl.

Hinweis: Bei nicht aufgeteilten Uploads sollte onReadSucceeded nur aufgerufen werden, wenn das Lesen erfolgreich war und mindestens ein Byte in byteBuffer gelesen wurde. Bei aufgeteilten Uploads (die Größe der Daten ist unbekannt) ist es zulässig, onReadSucceeded für den letzten Teil mit einem leeren Byte-Puffer aufzurufen.

Parameter
uploadDataSink: UploadDataSink!

Das Objekt, das benachrichtigt werden soll, wenn das Lesen abgeschlossen ist.

byteBuffer: ByteBuffer!

Der Puffer, in den die gelesenen Bytes kopiert werden sollen. Ändern Sie das Limit von „byteBuffer“ nicht.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. onFailed wird aufgerufen, wobei die ausgelöste Ausnahme als Ursache der CallbackException festgelegt wird.

Zurückspulen

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

Setzt die Upload-Daten an den Anfang zurück. Wird aufgerufen, wenn Cronet erfordert, dass sich der Upload-Datenanbieter in einem Zustand befindet, als wäre read noch nie aufgerufen worden.

Um zu signalisieren, dass der Vorgang abgeschlossen ist, müssen Implementierungen dieser Funktion onRewindSucceeded aufrufen, um den Erfolg anzugeben, oder onRewindError bei einem Fehler. Auch wenn die zugehörige UrlRequest abgebrochen wird, muss eine der beiden Methoden aufgerufen werden, bevor Ressourcen sicher freigegeben werden können. Das Auslösen einer Ausnahme aus der Methode entspricht dem Aufruf von onRewindError. Wenn das Zurückspulen nicht unterstützt wird (z. B. beim Lesen aus einem einmaligen Stream), sollte onRewindError sofort aufgerufen werden.

Der Implementierer kann davon ausgehen, dass weder read noch ein gleichzeitiger rewind-Aufruf ausgegeben wird, bis er die Senke benachrichtigt, dass das Zurückspulen abgeschlossen ist, wie im vorherigen Absatz beschrieben.

Diese Methode wird intern von Cronet verwendet, wenn der Body mehrmals hochgeladen werden muss. Dies kann in vielen verschiedenen Situationen auftreten, z. B. beim Folgen von Weiterleitungen oder beim Wiederholen von Anfragen nach einer Zeitüberschreitung oder einer Netzwerkunterbrechung. Obwohl die Implementierung des Zurückspulens im Allgemeinen optional ist, schlagen Anfragen, bei denen es erforderlich ist, fehl, wenn es nicht implementiert ist.

Parameter
uploadDataSink: UploadDataSink!

Das Objekt, das benachrichtigt werden soll, wenn der Zurückspulvorgang abgeschlossen ist, unabhängig davon, ob er erfolgreich war oder nicht.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. onFailed wird aufgerufen, wobei die ausgelöste Ausnahme als Ursache der CallbackException festgelegt wird.