我有一个检查我的文件是否存在于驱动器上的方法,如果没有,它会上传一个并添加权限
这个方法在第一次测试时工作,而更新请求在文件上工作
删除驱动器中的所有现有文件后,上传停止工作,响应体为空,如果我在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驱动器。这是成功的!从驱动器中删除新文档后,我得到了与上述相同的行为,上传时为空响应。
所以,即使我删除了旧文档,它仍然会识别出它与驱动器上的文档相同。
有人知道防止这种情况的方法吗?