Mehrere API-Methoden unterstützen das Hochladen von Medien zusätzlich zu einem normalen Textkörper.
In diesem Fall wird die reguläre Anfragemethode überlastet,
Stream
zum Hochladen.
Übersicht
Für alle Stream
, die du hochladen möchtest, solltest du die Funktion „Fortsetzbar“ verwenden
„media Upload“, mit dem Streams in kleineren Blöcken hochgeladen werden können.
Dies ist besonders nützlich,
wenn Sie große Dateien übertragen,
und die Wahrscheinlichkeit einer Netzwerkunterbrechung oder einer anderen Übertragung
Fehler hoch ist.
Außerdem lässt sich damit die Bandbreitennutzung bei Netzwerkausfällen reduzieren.
da Sie Uploads großer Dateien
nicht neu starten müssen.
ResumableMediaUpload
Upload von fortsetzbaren Medien ist eine Funktion in der .NET-Clientbibliothek der Google API seit 1.2.0-Beta. Die Google API-spezifischen Bibliotheken enthalten praktische Methoden zum mit dieser Funktion interagieren.
Das Upload-Protokoll für fortsetzbare Medien wird beispielsweise auf der
Seite zum Hochladen von Medien für die Drive API
Die Hauptklasse der Interessen
ResumableUpload
Bei dieser Implementierung werden die Medieninhalte in Blöcken hochgeladen.
Die Standard-Blockgröße beträgt 10 MB, aber Sie können sie ändern, indem Sie
Das Attribut ChunkSize
der Anfrage wird auf ein Vielfaches von 256 KB festgelegt.
Wenn in einer Anfrage ein Serverfehler auftritt, ist ein exponentieller Backoff
wird verwendet, um die Bytes, die nicht erfolgreich hochgeladen wurden, noch einmal zu senden.
Standardmäßig ist der exponentielle Backoff für jede Clientanfrage aktiviert.
Sie können das Standardverhalten beim Erstellen
ein neues Dienstobjekt erstellen, indem Sie
<ph type="x-smartling-placeholder"></ph>
DefaultExponentialBackOffPolicy
-Property auf BaseClientService.Initializer
und/oder das Festlegen der
<ph type="x-smartling-placeholder"></ph>
HttpClientInitializer
mit Ihrer eigenen Implementierung von IConfigurableHttpClientInitializer
mit einer Backoff-Richtlinie.
Die Methoden, die das Hochladen von Medien unterstützen, sind
in der Referenzdokumentation für die API-spezifische Dokumentation.
Für diese API-Methoden verwenden Sie einfach Upload
und
UploadAsync
Methoden wurden hinzugefügt.
Diese Methoden benötigen einen Stream
zum Hochladen und den zugehörigen Inhaltstyp als Parameter.
Achte darauf, dass die Position des hochgeladenen Streams 0 ist. Andernfalls erhältst du folgende Fehlermeldung: "System.UngültigeOperationAusnahme: Der angegebene Header wurde nicht gefunden."
Beachten Sie, dass aufgrund des Verhaltens des HttpClient
-Objekts des Frameworks
Klasse, wird eine TaskCanceledException
ausgelöst, wenn beim Upload eine Zeitüberschreitung auftritt.
Wenn Sie diese Ausnahme sehen, sollten Sie das Attribut Timeout
manuell erhöhen in
den von Ihrem Dienstobjekt verwendeten Client.
Beispielcode
// Create the service using the client credentials. var service = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "Application_Name" }); using var uploadStream = System.IO.File.OpenRead("Local_File_Name"); // Create the File resource to upload. Google.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File { Name = "Drive_File_Name" }; // Get the media upload request object. FilesResource.CreateMediaUpload insertRequest = service.Files.Create( driveFile, uploadStream, "image/jpeg"); // Add handlers which will be notified on progress changes and upload completion. // Notification of progress changed will be invoked when the upload was started, // on each upload chunk, and on success or failure. insertRequest.ProgressChanged += Upload_ProgressChanged; insertRequest.ResponseReceived += Upload_ResponseReceived; await insertRequest.UploadAsync(); static void Upload_ProgressChanged(IUploadProgress progress) => Console.WriteLine(progress.Status + " " + progress.BytesSent); static void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) => Console.WriteLine(file.Name + " was uploaded successfully");