Google云端硬盘上传失败

时间:2013-11-29 09:10:08

标签: c# asp.net-mvc-4 google-drive-api

我有一个检查我的文件是否存在于驱动器上的方法,如果没有,它会上传一个并添加权限 这个方法在第一次测试时工作,而更新请求在文件上工作 删除驱动器中的所有现有文件后,上传停止工作,响应体为空,如果我在viddler中查看它,请求体也是空的。 (该文件是有效的docx)
我使用以下代码:

DriveService service = Google_SDK.Authentication.AppFlowMetadata.BuildServerDriveService();

Google.Apis.Drive.v2.Data.File file;
var items = service.Files.List().Execute().Items.ToLookup(a => a.OriginalFilename = doc.Name + " (" + doc.Id + ".docx)");
if (items.Count > 0)
{
    // This worked while testing:
        //string fileId = items.FirstOrDefault().FirstOrDefault().Id;
        //FilesResource.UpdateRequest uploadRequest = service.Files.(body, fileId, stream, "application/vnd.google-apps.document");
        //uploadRequest.Convert = true;
        //uploadRequest.Upload();

    file = items.FirstOrDefault().FirstOrDefault();
}
else
{

    Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
    body.Title = doc.Name + " (" + doc.Id + ".docx)";
    body.OriginalFilename = doc.Name + " (" + doc.Id + ".docx)";
    body.Editable = true;
    body.Shared = false;
    body.WritersCanShare = false;
    body.Copyable = false;
    body.Description = doc.Notes;
    body.MimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

    byte[] byteArray = doc.DocxContent; // valid byteArray
    System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

    FilesResource.InsertMediaUpload uploadRequest = service.Files.Insert(body, stream, "application/vnd.google-apps.document");
    uploadRequest.Convert = true;
    uploadRequest.Upload();

    file = uploadRequest.ResponseBody; // No errors or exceptions but returns null

    PermissionsResource.InsertRequest permissionRequest = service.Permissions.Insert(new Permission()
    {
        Role = "writer",
        Type = "user",
        EmailAddress = "user@domain.com",
        Value = "user@domain.com"

    }, file.Id); // file.Id fails becase file equals null
    permissionRequest.Execute();
} 

我真的没有看到我做错了什么以及为什么这是第一次有效 提前谢谢。

编辑:


我一直在调试项目的其他部分,我发现更改仍然存在,这似乎合乎逻辑,任何删除都保存为版本控制的更改。
也许这与我的问题有关?

此外,我忘了提及所有文件的删除都是通过代码完成的,所使用的驱动器不是gmail帐户,而是* .apps.googleusercontent.com帐户。 我用来删除所有文件的代码:

DriveService service = Google_SDK.Authentication.DriveServiceProvider.Service;
FilesResource.ListRequest listRequest = service.Files.List();

FileList listResponse = listRequest.Execute();
int amount = listResponse.Items.Count();
foreach(Google.Apis.Drive.v2.Data.File f in listResponse.Items.AsQueryable()){
   FilesResource.DeleteRequest deleteRequest = service.Files.Delete(f.Id);
   deleteRequest.Execute();
}

HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent(String.Format("Removed {0} items.",amount));
return response;

编辑2:


我在我的系统中创建了一个全新的文档,并尝试将其上传到google驱动器。这是成功的!从驱动器中删除新文档后,我得到了与上述相同的行为,上传时为空响应。

所以,即使我删除了旧文档,它仍然会识别出它与驱动器上的文档相同。

有人知道防止这种情况的方法吗?

0 个答案:

没有答案