C# 使用Google Drive API v3移动文件
我正在尝试使用Google Drive API v3将文件从一个文件夹移动到另一个文件夹。我找到了如何实现这一点的文档。我使用了文档页面中的.NET示例代码,并创建了一个如下所示的方法:C# 使用Google Drive API v3移动文件,c#,asp.net-mvc,google-api,google-drive-api,google-api-dotnet-client,C#,Asp.net Mvc,Google Api,Google Drive Api,Google Api Dotnet Client,我正在尝试使用Google Drive API v3将文件从一个文件夹移动到另一个文件夹。我找到了如何实现这一点的文档。我使用了文档页面中的.NET示例代码,并创建了一个如下所示的方法: public ActionResult MoveFile(string fileToMove, string destination) { DriveService service = new DriveService(new BaseClientService.Initializer {
public ActionResult MoveFile(string fileToMove, string destination)
{
DriveService service = new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer = <USER CREDENTIAL>,
ApplicationName = "APPNAME"
});
var searchFiles = service.Files.List();
searchFiles.Corpus = FilesResource.ListRequest.CorpusEnum.User;
searchFiles.Q = "name = '" + fileToMove + "'";
searchFiles.Fields = "files(*)";
string fileToMoveId = searchFiles.Execute().Files[0].Id;
searchFiles.Q = "name = '" + destination + "'";
string destinationId = searchFiles.Execute().Files[0].Id;
//Code used from documentation
// Retrieve the existing parents to remove
var getRequest = service.Files.Get(fileToMoveId);
getRequest.Fields = "parents";
var file = getRequest.Execute();
var previousParents = String.Join(",", file.Parents);
// Move the file to the new folder
var updateRequest = service.Files.Update(file, fileToMoveId);
updateRequest.Fields = "id, parents";
updateRequest.AddParents = destinationId;
updateRequest.RemoveParents = previousParents;
file = updateRequest.Execute();
return RedirectToAction("Files", new {folderId = destinationId});
}
public ActionResult MoveFile(string fileToMove,string destination)
{
DriveService=new DriveService(new BaseClientService.Initializer
{
HttpClientInitializer=,
ApplicationName=“APPNAME”
});
var searchFiles=service.Files.List();
searchFiles.Corpus=fileResource.ListRequest.CorpusEnum.User;
searchFiles.Q=“name=”+fileToMove+”;
searchFiles.Fields=“files(*)”;
字符串fileToMoveId=searchFiles.Execute().Files[0].Id;
searchFiles.Q=“name=”+destination+”;
字符串destinationId=searchFiles.Execute().Files[0].Id;
//从文档中使用的代码
//检索要删除的现有父级
var getRequest=service.Files.Get(fileToMoveId);
getRequest.Fields=“parents”;
var file=getRequest.Execute();
var-previousParents=String.Join(“,”,file.Parents);
//将文件移动到新文件夹
var updateRequest=service.Files.Update(file,fileToMoveId);
updateRequest.Fields=“id,parents”;
updateRequest.AddParents=destinationId;
updateRequest.RemoveParents=以前的父母;
file=updateRequest.Execute();
返回RedirectToAction(“Files”,new{folderId=destinationId});
}
当我执行此代码时,会出现以下错误:
父字段不能在更新请求中直接写入。使用
改为addParents和removeParents参数
这个错误对我来说毫无意义,因为这个代码示例来自文档页面本身。我搞不懂其他参数是什么意思。addParents和removeParents参数是什么意思?是否
updateRequest.AddParents
和updateRequest.RemoveParents
参数不正确?确定问题出在这里
var updateRequest=service.Files.Update(file,fileToMoveId)
该方法要求您发送要更新的文件体。这通常是有意义的,因为你想做的任何改变都可以添加到身体中
现在的问题是,您从file.get获取文件。这是完全正常的。你应该这样做。问题是该文件中有一些字段无法更新。因此,通过发送完整文件,API将拒绝您的更新。如果您在请求正文下进行检查,您将看到哪些恶魔是可更新的
问题:
现在,这要么是客户端库的问题,要么是API的问题,我将不得不在谷歌找到一些人,看看是哪一种情况
修复:
我做了一些测试,并发送了一个空文件对象,因为主体工作正常。文件已被移动
var updateRequest = service.Files.Update(new Google.Apis.Drive.v3.Data.File(), fileToMove.Id);
updateRequest.AddParents = directoryToMove.Id;
updateRequest.RemoveParents = fileToMove.Parents[0];
var movedFile = updateRequest.Execute();
此方法在您自己的驱动器中工作时效果良好,但在一个文件(文件夹)只能有一个父级的团队驱动器中则不行。我没有团队驱动中的解决方案@DalmTo我删除了该行,因此更新请求现在看起来是这样的:
var updateRequest=service.Files.update(file,filetomovid);updateRequest.AddParents=destinationId;updateRequest.RemoveParents=以前的父母;file=updateRequest.Execute()代码>不幸的是,出现了相同的错误。检查我的更新我想你发现了一个错误,但我不确定它在哪里。我已向谷歌发送了一些消息。你使用的示例现在已修复。对于尝试更新文件时遇到此错误的任何人。您需要从元数据中删除“parents”字段,并添加具有相同parentId的removeParents和addParents字段。哪种方法?你指的是什么?这看起来不像是对原始问题的回答。