0

我有一个使用 Google Drive 来管理文件的 winforms 应用程序。我的文件上传方法相当简单:

    public static File UploadFile(string sourcefile, string description, string mimeType, int attempt)
    {
        try
        {
            string title = Path.GetFileName(sourcefile);
            var file = new File {Title = title, Description = description, MimeType = mimeType};
            byte[] bytearray = System.IO.File.ReadAllBytes(sourcefile);
            var stream = new MemoryStream(bytearray);
            FilesResource.InsertMediaUpload request = DriveService.Files.Insert(file, stream, "text/html");
            request.Convert = false;
            request.Upload();
            File result = request.ResponseBody;
            return result;
        }
        catch (Exception e)
        {
            if(attempt<10)
            {
                return UploadFile(sourcefile, description, mimeType, attempt + 1);
            }
            else
            {
                throw e;
            }
        }
    }

这可行,但在使用 Google Drive 之前,我使用了 FTP 解决方案,它允许异步上传操作。我想在文件上传时包含一个进度条,但我不知道是否有办法异步调用 InserMediaUpload。这种能力存在吗?

谢谢你。

4

3 回答 3

2

我们今天早些时候刚刚发布了 1.4.0-beta 版本。1.4.0-beta 有很多很棒的功能,包括 UploadAsync,它可以选择获取取消令牌。还请查看我们的新媒体 wiki 页面

于 2013-06-26T17:38:39.233 回答
1

我们仍然不支持 UpdateAsync 方法,但如果您需要更新进度条,您可以使用 ProgressChanged 事件。请记住,默认的 ChunkSize 是 10MB,因此如果您想在较短的时间后获得更新,您应该相应地更改 ChunkSize。请注意,在库的下一个版本中,我们还将支持服务器错误 (5xx)

更新(2015 年 6 月):我们确实在2 年前增加了对UploadAsync的支持。使用ExponentialBackoffPolicy也支持服务器错误。

于 2013-04-21T01:17:20.377 回答
0

我知道已经晚了..但是添加进度条相当简单。

以下是上传的工作代码:

 public static File uploadFile(DriveService _service, string _uploadFile, string _parent, string _descrp = "Uploaded with .NET!")
 {
    if (System.IO.File.Exists(_uploadFile))
    {
       File body = new File();
       body.Title = System.IO.Path.GetFileName(_uploadFile);
       body.Description = _descrp;
       body.MimeType = GetMimeType(_uploadFile);
       body.Parents = new List<ParentReference>() { new ParentReference() { Id = _parent } };

       byte[] byteArray = System.IO.File.ReadAllBytes(_uploadFile);
       System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
       try
       {
           FilesResource.InsertMediaUpload request = _service.Files.Insert(body, stream, GetMimeType(_uploadFile));
           request.ProgressChanged += UploadProgessEvent;
           request.ChunkSize = FilesResource.InsertMediaUpload.MinimumChunkSize; // Minimum ChunkSize allowed by Google is 256*1024 bytes. ie 256KB. 
           request.Upload();
           return request.ResponseBody;
       }
       catch(Exception e)
       {
           MessageBox.Show(e.Message,"Error Occured");
       }
   }
   else
   {
       MessageBox.Show("The file does not exist.","404");
   }
}

private void UploadProgessEvent(Google.Apis.Upload.IUploadProgress obj)
{
    label1.Text = ((obj.ByteSent*100)/TotalSize).ToString() + "%";

    // update your ProgressBar here
}
于 2016-12-23T04:53:23.137 回答