谷歌驱动器异步上传方法
本文关键字:方法 异步 驱动器 谷歌 | 更新日期: 2023-09-27 18:09:52
我有一个使用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。这种能力存在吗?
谢谢。
我们今天早些时候刚刚发布了1.4.0测试版。1.4.0-beta有很多很棒的功能,包括UploadAsync,它可以选择获得一个取消令牌。
我们仍然不支持UpdateAsync方法,但是如果你需要更新你的进度条,你可以使用ProgressChanged事件。记住,默认的ChunkSize是10MB,所以如果您希望在较短的时间后获得更新,您应该相应地更改ChunkSize。请注意,在库的下一个版本中,我们还将支持服务器错误(5xx)
2015年6月更新:我们在两年前就添加了对UploadAsync的支持。使用ExponentialBackoffPolicy也支持服务器错误。
我知道有点晚了,但是添加进度条是相当简单的。
下面是用于上传的工作代码:
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
}