我有一个使用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云端硬盘之前,我使用的是FTP解决方案,它允许异步上传操作。我希望在文件上传时包含进度条,但我无法弄清楚是否有异步调用InserMediaUpload的方法。这样的能力存在吗?
谢谢。
答案 0 :(得分:2)
我们今天早些时候announced 1.4.0-beta version。 1.4.0-beta有很多很棒的功能,包括UploadAsync,可选择获取取消令牌。 另请查看我们的新Media wiki page。
答案 1 :(得分:1)
我们仍然不支持UpdateAsync方法,但如果您需要更新进度条,则可以使用ProgressChanged事件。请记住,默认的ChunkSize是10MB,因此如果您希望在较短的时间段后获得更新,则应相应地更改ChunkSize。 请注意,在库的下一个版本中,我们还将支持服务器错误(5xx)
更新(2015年6月): 我们确实在2年多前添加了对UploadAsync的支持。使用ExponentialBackoffPolicy支持服务器错误。
答案 2 :(得分:0)
我知道它已经很晚了..但添加进度条非常简单。
以下是用于上传的工作代码:
MS.data.in$age <- as.numeric(sub(".*-(\\d+).*", "\\1", MS.data.in$age))
MS.data.in$age
#[1] 10 20 30 40 50 60
和
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");
}
}