Medien hochladen

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");