【问题标题】:YouTube V3 API C# - ResumeAsync() The operation was CanceledYouTube V3 API C# - ResumeAsync() 操作被取消
【发布时间】:2016-08-04 01:29:07
【问题描述】:

我在 YouTube API 使用 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 属性。但是,这两个字段在 API 中都是私有的。

除了使用反射来设置这些私有属性之外,还有更好的方法吗?

【问题讨论】:

  • 检查这个 SO 问题21321878 如果它可以帮助你:)
  • 是的,我在发帖之前已经看过这个帖子。但是,它没有回答我的问题。我的问题几乎是“除了使用反射来设置这些私有属性之外,还有更好的方法吗?”...您的链接提供了一个反射工作的示例。这根本不是解决这个问题的好方法。它违背了 O-O 编程的信息隐藏原则的目的。你现在看到了吗?
  • 链接“绕过”了问题,它并没有隐藏这是一个问题的事实。

标签: c# youtube-api youtube-data-api


【解决方案1】:

从 1.14 版开始,Google API v3 .NET 客户端库 包含在 ResumableUpload 会话期间保存 UploadUri 并在以后使用该 UploadUri 的功能 在程序重新启动时恢复上传。

https://github.com/google/google-api-dotnet-client-samples 中有两个 ResumableUpload 示例,它们演示了 .ResumeAsync 与先前保存的 UploadUri 的附加参数的使用。上传开始时调用的 UploadSessionData 事件将 UploadUri 提供给客户端程序,以便客户端程序可以将其保存到持久存储中,以便在程序重新启动时进行检索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2019-11-01
    相关资源
    最近更新 更多