1

GoogleドライブAPI v3を使用して、あるフォルダから別のフォルダにファイルを移動しようとしています。私はこの文書をどのように見つけましたかhere。私は、ドキュメントページから.NETのサンプルコードを使用してこのようになります方法作成:GoogleドライブAPI v3でファイルを移動する

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.AddParentsupdateRequest.RemoveParentsは正しいパラメータではありませんか?

答えて

3

ここに問題があります。

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

方法は、あなたが更新されるファイルのボディを送信することを要求されます。これは通常、あなたが体に加えることができるようにするための変更として意味があります。

ここで問題になっているのは、file.getからファイルを取得したことです。それは全く正常です。これがあなたのやり方である。問題は、そのファイルに更新できないフィールドがいくつかあることです。したがって、完全なファイルを送信すると、APIによって更新が拒否されます。 Request bodyの下にFiles: updateをチェックすると、更新可能な人が表示されます。

問題

さて、これはクライアントライブラリや、私がそうであるかを確認するためにGoogleの少数の人々を追跡する必要がありますするつもりです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(); 
+0

@DalmTo: 'VAR updateRequest = service.Files.Update(ファイル、fileToMoveId)。 updateRequest.AddParents = destinationId; updateRequest.RemoveParents = previousParents; file = updateRequest.Execute(); ' 残念ながら、同じエラーが発生します。 – MennoB

+0

私の更新を確認してくださいあなたはバグを発見したと思いますが、どこにメッセージが送られてきたのかわかりません。 – DaImTo

+0

使用したサンプルが修正されました。 – DaImTo

関連する問題