使用Google Drive API v3移动文件

Met*_*tNL 4 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
    {
        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});
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我收到以下错误:

parent字段在更新请求中不可直接写入.请改用addParents和removeParents参数.

这个错误对我来说没有意义,因为这个代码示例来自文档页面本身.我无法弄清楚他们的意思是什么.addParents和removeParents参数是什么意思?是updateRequest.AddParentsupdateRequest.RemoveParents不正确的参数?

DaI*_*mTo 8

好的,这是问题所在.

var updateRequest = service.Files.Update(file,fileToMoveId);

该方法要求您发送要更新的文件正文.这通常是有意义的,因为您想要的任何更改都可以添加到正文中.

现在你遇到的问题是你从file.get获得了你的文件.这完全正常.这就是你应该这样做的方式.问题是该文件中有一些字段无法更新.因此,通过发送完整文件,API拒绝您的更新.如果您在Request body下选中Files:update,您将看到哪些恶魔可以更新.

问题:

现在,这是客户端库或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();
Run Code Online (Sandbox Code Playgroud)