2016-04-13 47 views
1

我在使用ResumeAsync()方法时遇到了一些YouTube API问题。YouTube V3 API C# - 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中都是PRIVATE。

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

+0

检查此SO问题[21321878](http://stackoverflow.com/questions/21321878/youtube-c-sharp-api-v3-how-do-you-resume-an-interrupted-upload)如果它可以帮助你:) – KENdi

+0

是的,我在发布之前看过这个帖子。但是,它不回答我的问题。我的问题几乎是“除了使用反射设置这些私有属性以外,还有更好的方法吗?”...您的链接提供了反射有效的示例。这根本不是解决这个问题的好方法。它破坏了O-O编程信息隐藏原理的目的。你现在看到了吗? – Ginko

+0

链接'解决'问题,这是不是隐藏了这是一个问题的事实。 – Ginko

回答

1

随着1.14版本中,谷歌API第3版.NET客户端库包含的能力来保存ResumableUpload会议期间UploadUri和以后使用UploadUri恢复上传在程序的情况下,重新开始。

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