4 votes

Déplacement de fichiers avec Google Drive API v3

J'essaie de déplacer un fichier d'un dossier à l'autre à l'aide de l'API Google Drive v3. aquí . J'ai utilisé l'exemple de code .NET de la page de documentation et créé une méthode qui ressemble à ceci :

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});
}

Lorsque j'exécute ce code, j'obtiens l'erreur suivante :

Le champ parents n'est pas directement accessible en écriture dans les demandes de mise à jour. Utilisez plutôt les paramètres addParents et removeParents à la place.

L'erreur n'a pas vraiment de sens pour moi car cet exemple de code provient de la page de documentation elle-même. Je n'arrive pas à comprendre quels autres paramètres sont concernés. Quels paramètres addParents et removeParents signifient-ils ? Est-ce que updateRequest.AddParents et updateRequest.RemoveParents pas les bons paramètres ?

10voto

DaImTo Points 3712

Ok, voici le problème.

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

La méthode exige que vous envoyiez le corps d'un fichier à mettre à jour. Cela a normalement du sens, car toute modification que vous souhaitez apporter peut être ajoutée au corps du fichier.

Maintenant, le problème que vous avez est que vous avez obtenu votre fichier à partir d'un fichier.get. Ce qui est tout à fait normal. C'est comme ça que tu devrais le faire. Le problème est qu'il y a certains champs dans ce fichier que vous ne pouvez pas mettre à jour. Donc, en envoyant le fichier complet, l'API rejette votre mise à jour. Si vous vérifiez Fichiers : mise à jour sous Request body, vous verrez quels sont les amis qui peuvent être mis à jour.

Numéro :

Il s'agit soit d'un problème avec la bibliothèque client, soit d'un problème avec l'API. Je vais devoir contacter quelques personnes chez Google pour voir ce qu'il en est.

Fixer :

J'ai fait quelques tests et l'envoi d'un objet fichier vide comme corps fonctionne très bien. Le fichier est déplacé.

 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();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X