Przesyłane multimedia

Istnieje kilka metod interfejsu API, które umożliwiają przesyłanie multimediów, a nie tylko w przypadku zwykłych treści. W takim przypadku standardowa metoda żądania jest przeciążona, aby uzyskać dodatkowe Stream, aby przesłać.

Omówienie

W przypadku Stream, które chcesz przesłać, użyj opcji Wznów funkcję przesyłania multimediów, która umożliwia przesyłanie strumieni w mniejszych fragmentach. Jest to szczególnie przydatne, gdy przenosisz duże pliki, i prawdopodobieństwo przerwy w działaniu sieci lub innej transmisji jest wysoka. Może też zmniejszyć wykorzystanie przepustowości w przypadku awarii sieci. bo nie trzeba ponownie przesyłać dużych plików.

ResumableMediaUpload

Wznowienie przesyłania multimediów to funkcja w bibliotece klienta .NET interfejsu API Google od wersji 1.2.0 beta. Biblioteki związane z interfejsami API Google zawierają wygodne metody podczas interakcji z tą funkcją.

Protokół przesyłania multimediów z możliwością wznowienia jest opisany na przykład na stronie stronie przesyłania multimediów dla interfejsu Drive API. Interesuje mnie to, ResumableUpload W tej implementacji treści multimedialne są przesyłane partiami.

Domyślny rozmiar fragmentu to 10 MB, ale możesz go zmienić ustawiając właściwość ChunkSize w żądaniu na dowolną wielokrotność 256 KB. Jeśli w żądaniu wystąpi błąd serwera, wzrasta wykładniczy czas do ponowienia jest używana do ponownego wysłania bajtów, których nie udało się przesłać. Domyślnie dla każdego żądania klienta funkcja wzrastającego ponowienia jest włączona. Możesz zmienić domyślne zachowanie podczas tworzenia nowego obiektu usługi, zmieniając Usługa DefaultExponentialBackOffPolicy w domenie BaseClientService.Initializer lub ustawienie parametru HttpClientInitializer z własną implementacją IConfigurableHttpClientInitializer dodający zasady ponowienia.

Określono metody, które obsługują przesyłanie multimediów w dokumentacji referencyjnej dotyczącej konkretnego interfejsu API. W przypadku tych metod interfejsu API wygoda Upload i Dodano metody (UploadAsync). Przesyłanie danych w przypadku tych metod wymaga parametru Stream i określonego typu treści.

Upewnij się, że pozycja przesyłanego strumienia wynosi 0. W przeciwnym razie pojawi się błąd: „System.InvalidOperationException: Nie znaleziono podanego nagłówka”.

Pamiętaj, że ze względu na działanie HttpClient platformy , a w przypadku przekroczenia limitu czasu przesyłania przesyłane jest żądanie TaskCanceledException. Jeśli widzisz ten wyjątek, spróbuj ręcznie zwiększyć wartość właściwości Timeout w klienta używanego przez obiekt usługi.

Przykładowy kod

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