2012-11-07 78 views
0

我想上传文件到谷歌驱动器和监控上传进度。我使用.net和api v2。ResumableUpload与谷歌驱动器api v2 .net

我在使用DriveService.Files.Insert方法,它给了我一个FilesResource.InsertMediaUpload,然后我使用ProgressChanged事件列出了进度。问题是这个事件只被调用3次:有“开始”,“上传”,“完成”状态。我想在“上传”状态下拨打很多电话。

这里是我的代码:

private UploadToGoogle(...) 
    { 
     //Consider I have an populated File and MemoryStream: 
     MemoryStream contentStream = /*Populated memoryStream*/; 
     File body = /*Populated file*/; 

     FilesResource.InsertMediaUpload uploadRequest = null; 

     try 
     { 
      contentStream.Position = 0; 

      uploadRequest = driveService.Files.Insert(body, contentStream, body.MimeType); 

      uploadRequest.ProgressChanged += new Action<Google.Apis.Upload.IUploadProgress>(UploadProgessEvent); 

      Action asyncAction =() => 
      { 
       uploadRequest.Upload(); 
       Console.WriteLine("Completed!"); 
      }; 

      var thread = new System.Threading.Thread(new System.Threading.ThreadStart(asyncAction)); 
      thread.Start(); 

     }catch(Exception) {} 
    } 

有关于老年人的API的ResumableUpload类互联网上的一些内容,但不知道如何使用,在v2中。我在Google.Apis.Upload命名空间中找到了ResumableUpload类,但它是抽象的,我不知道如何使用它。

我没有发现任何有用的有关进展情况的文件监控:https://developers.google.com/drive/manage-uploads

我真的不想通过WebRequest的使用断点续传的上传,有没有实现,在.NET SDK的方式...

回答

1

ProgressChanged事件仅在每次将完整的数据块发送到API时触发。如果减小块大小或者文件比默认块大小大得多,则会看到多次触发事件。

+0

谢谢!在使用DriveService.Files.Insert方法完成上载之前,是否可以获取文件ID? – IPValverde

+1

仅当上传完成时才生成并返回文件ID –