YouTube V3 API C# — ResumeAsync() Операция была отменена

У меня возникли проблемы с API YouTube при использовании метода ResumeAsync().

Вот мой код...

        YouTubeService youtube = await AuthService.AuthenticateYouTubeAsync(auth);
        ResumableUpload<Video, Video> vidUploadReq = null;

        var video = new Video();
        video.Snippet = new VideoSnippet();
        video.Snippet.Title = videoToUpload.Title;
        video.Snippet.Description = videoToUpload.Description;
        video.Snippet.Tags = videoToUpload.Tags;
        video.Snippet.CategoryId = videoToUpload.CategoryID;
        video.Status = new VideoStatus();
        video.Status.PrivacyStatus = videoToUpload.PrivacyStatus;
        var filePath = videoToUpload.LocalFilePath;

        // Get chunk size and make sure it's valid
        int chunkSizeBytes = defaultChunkSizeKB * 1024;

        using (var fileStream = new FileStream(filePath, FileMode.Open))
        {
            vidUploadReq = youtube.Videos.Insert(video, "snippet,status", fileStream, "video/*");
            vidUploadReq.ProgressChanged += videoUploadRequest_ProgressChanged;
            vidUploadReq.ResponseReceived += videoUploadRequest_ResponseReceived;
            vidUploadReq.ChunkSize = chunkSizeBytes;

            await vidUploadReq.UploadAsync(token);
        }

Какое место в этом занимает возобновление?

Должен ли я сериализовать объект ResumableUpload при перезапуске приложения?

Похоже, мне нужно сохранить UploadUri для следующего раза и в следующий раз установить эти свойства UploadUri и StreamLength. Однако оба этих поля являются PRIVATE в API.

Есть ли лучший способ, кроме использования отражения, для установки этих частных свойств?


person Ginko    schedule 13.04.2016    source источник
comment
Проверьте этот вопрос SO 21321878 если это поможет :)   -  person KENdi    schedule 14.04.2016
comment
Да, я видел эту тему до того, как написал. Однако это не отвечает на мой вопрос. Мой вопрос в значительной степени заключается в том, есть ли лучший способ, кроме использования отражения, для установки этих частных свойств?... В вашей ссылке приведен пример, где отражение работает. Это НЕ хороший способ решить эту проблему вообще. Это противоречит принципам сокрытия информации ОО-программирования. Теперь ты видишь?   -  person Ginko    schedule 24.04.2016
comment
Ссылка «обходит» проблему, не скрывает ли она того факта, что это ЯВЛЯЕТСЯ проблемой.   -  person Ginko    schedule 24.04.2016


Ответы (1)


Начиная с версии 1.14, клиентская библиотека Google API v3 .NET содержит возможность сохранять UploadUri во время сеанса ResumableUpload и позже использовать этот UploadUri для возобновления загрузки в случае перезапуска программы.

В https://github.com/google/google-api-dotnet-client-samples, которые демонстрируют использование .ResumeAsync с дополнительным параметром ранее сохраненного UploadUri. Событие UploadSessionData, вызываемое в начале загрузки, предоставляет клиентской программе UploadUri, чтобы она могла сохранить его в постоянном хранилище для извлечения при перезапуске программы.

person Mike Meinz    schedule 11.08.2016