使用 Google Drive API v3 移动文件
Moving files with Google Drive API v3
我正在尝试使用 Google Drive API v3 将文件从一个文件夹移动到另一个文件夹。我找到了如何做到这一点的文档 here。我使用了文档页面中的 .NET 示例代码并创建了一个如下所示的方法:
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});
}
当我执行这段代码时,出现以下错误:
The parents field is not directly writable in update requests. Use the
addParents and removeParents parameters instead.
这个错误对我来说没有意义,因为这个代码示例来自文档页面本身。我不知道他们的其他参数是什么意思。 addParents 和 removeParents 参数是什么意思? updateRequest.AddParents
和 updateRequest.RemoveParents
不是正确的参数吗?
好的,问题来了。
var updateRequest = service.Files.Update(file, fileToMoveId);
该方法要求您发送要更新的文件正文。这通常是有道理的,因为您想要进行的任何更改都可以添加到正文中。
现在您遇到的问题是您的文件来自 file.get。这是完全正常的。这就是你应该做的。问题是该文件中有一些您无法更新的字段。因此,通过发送完整文件,API 拒绝您的更新。如果您检查请求正文下的 Files: update,您将看到哪些 fiends 是可更新的。
问题:
现在这要么是客户端库的问题,要么是 API 我将不得不在 Google 找几个人看看到底是哪种情况。
修正:
我做了一些测试并发送了一个空文件对象,因为主体工作正常。文件已移动。
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();
此方法在您自己的驱动器中工作时效果很好,但在文件(文件夹)严格只能有 1 个父驱动器的团队驱动器中效果不佳。我在团队驱动器中没有解决方案
我正在尝试使用 Google Drive API v3 将文件从一个文件夹移动到另一个文件夹。我找到了如何做到这一点的文档 here。我使用了文档页面中的 .NET 示例代码并创建了一个如下所示的方法:
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});
}
当我执行这段代码时,出现以下错误:
The parents field is not directly writable in update requests. Use the addParents and removeParents parameters instead.
这个错误对我来说没有意义,因为这个代码示例来自文档页面本身。我不知道他们的其他参数是什么意思。 addParents 和 removeParents 参数是什么意思? updateRequest.AddParents
和 updateRequest.RemoveParents
不是正确的参数吗?
好的,问题来了。
var updateRequest = service.Files.Update(file, fileToMoveId);
该方法要求您发送要更新的文件正文。这通常是有道理的,因为您想要进行的任何更改都可以添加到正文中。
现在您遇到的问题是您的文件来自 file.get。这是完全正常的。这就是你应该做的。问题是该文件中有一些您无法更新的字段。因此,通过发送完整文件,API 拒绝您的更新。如果您检查请求正文下的 Files: update,您将看到哪些 fiends 是可更新的。
问题:
现在这要么是客户端库的问题,要么是 API 我将不得不在 Google 找几个人看看到底是哪种情况。
修正:
我做了一些测试并发送了一个空文件对象,因为主体工作正常。文件已移动。
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();
此方法在您自己的驱动器中工作时效果很好,但在文件(文件夹)严格只能有 1 个父驱动器的团队驱动器中效果不佳。我在团队驱动器中没有解决方案