2016-04-13 10 views
1

Ich habe einige Probleme mit der YouTube-API mit der ResumeAsync() -Methode.YouTube V3 API C# - ResumeAsync() Der Vorgang wurde abgebrochen

Hier ist mein Code ...

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

Wo passen in diese nicht wieder aufnehmen?

Muss ich das ResumableUpload-Objekt für den Neustart der Anwendung serialisieren?

Es sieht so aus, als müsste ich UploadUri für das nächste Mal beibehalten und beim nächsten Mal diese UploadUri- und StreamLength-Eigenschaften festlegen. Beide Felder sind jedoch PRIVATE in der API.

Gibt es einen besseren Weg als die Verwendung von Reflection, um diese privaten Eigenschaften festzulegen?

+0

Überprüfen Sie diese SO Frage [21321878] (http://stackoverflow.com/questions/21321878/youtube-c-sharp-api-v3-how-do-you-resume-an-interrupted-upload), wenn es möglich ist helfe dir :) – KENdi

+0

Ja ich habe diesen Thread schon gesehen bevor ich gepostet habe. Allerdings beantwortet es meine Frage nicht. Meine Frage ist so ziemlich "Gibt es einen besseren Weg als die Verwendung von Reflektion, um diese privaten Eigenschaften festzulegen?" ... Ihr Link zeigt ein Beispiel, in dem die Reflektion funktioniert. Dies ist kein guter Weg, um dieses Problem zu lösen. Es vereitelt den Zweck der Informationsverbergungsprinzipien der O-O-Programmierung. Siehst du jetzt? – Ginko

+0

Der Link "umgeht" das Problem, verdeckt es nicht die Tatsache, dass dies ein Problem ist. – Ginko

Antwort

1

Ab Version 1.14, die Google API-Client-Bibliothek v3 .NET enthält die Fähigkeit, den UploadUri während einer ResumableUpload Sitzung zu speichern und später zu verwenden, den UploadUri den Upload im Fall eines Programms wieder aufnehmen Neustart.

Es gibt zwei ResumableUpload Beispiele in https://github.com/google/google-api-dotnet-client-samples, die die Verwendung von .ResumeAsync mit einem zusätzlichen Parameter des zuvor gespeicherten UploadUri demonstrieren. Ein UploadSessionData Ereignis, das zu Beginn des Uploads aufgerufen wird, stellt das UploadUri dem Client-Programm zur Verfügung, so dass es in persistenten Speicher zum Abruf nach einem Programmneustart gespeichert werden kann.