Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Google Drive API v3移动文件_C#_Asp.net Mvc_Google Api_Google Drive Api_Google Api Dotnet Client - Fatal编程技术网

C# 使用Google Drive API v3移动文件

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 {

我正在尝试使用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});
}
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字段。哪种方法?你指的是什么?这看起来不像是对原始问题的回答。