L'API Google Drive copie un fichier dans le Drive d'équipe

fhcat

J'écris une fonction pour copier un dossier de mon Google Drive dans un autre dossier. La fonction fonctionne pour les dossiers qui se trouvent dans l'espace Drive normal. Cependant, lorsque je l'exécute sur un dossier de lecteur d'équipe, j'obtiens l'erreur ci-dessous.

Traceback (most recent call last):
  File "C:/Code/catpython/driveapi_utils.py", line 232, in <module>
    test_copy_folder()
  File "C:/Code/catpython/driveapi_utils.py", line 221, in test_copy_folder
    copy_folder(service, src='xxxxxx',
  File "C:/Code/catpython/driveapi_utils.py", line 211, in copy_folder
    copy_folder(service, file.get('id'), file.get('name'), dst_parent_id, **kwargs)
  File "C:/Code/catpython/driveapi_utils.py", line 201, in copy_folder
    fileId=clone.get("id"),
AttributeError: 'NoneType' object has no attribute 'get'

Mon code est le suivant:

def copy_folder(service, src, src_name, dst, **kwargs):
    """
    Copies a folder. It will create a new folder in dst with the same name as src,
    and copies the contents of src into the new folder
    src: Source folder's id
    dst: Destination folder's id that the source folder is going to be copied to
    """

    page_token = None
    while True:
        response = service.files().list(q="'%s' in parents and trashed = false" % src,
                                        supportsAllDrives=True,
                                        spaces='drive',
                                        fields='nextPageToken, files(id, name, mimeType)',
                                        pageToken=page_token,
                                        includeItemsFromAllDrives=True,
                                        ).execute()
        dst_parent_id = create_folder(service, src_name, dst, **kwargs)
        for file in response.get('files', []):
            # Process change
            print('Found file: %s (%s, %s)' % (file.get('name'), file.get('id'), file.get('mimeType')))
            if not file.get('mimeType') == 'application/vnd.google-apps.folder':
                clone = None
                try:
                    clone = service.files().copy(fileId=file.get('id'),
                                         body={'title': 'copiedFile',
                                               'parents': [{'kind': "drive#fileLink",
                                                            'id': dst_parent_id}],
                                               'supportsAllDrives': True,
                                               }).execute()
                except HttpError as httpe:
                    pass
                try:
                    service.files().update(
                        fileId=clone.get("id"),
                        addParents=dst_parent_id,
                        removeParents=src,
                        fields="id, parents",
                        supportsAllDrives=True
                    ).execute()
                except HttpError as httpe:
                    pass
            else:
                print('drilling into %s' % file.get('name'))
                copy_folder(service, file.get('id'), file.get('name'), dst_parent_id, **kwargs)
        page_token = response.get('nextPageToken', None)
        if page_token is None:
            break

J'ai débogué le code et je pense que l'api de copie a généré une erreur:

<HttpError 404 when requesting https://www.googleapis.com/drive/v3/files/1n7h04M6Rpz3m2J6MGZq8trlnADEBFLrK/copy?alt=json returned "File not found: 1n7h04M6Rpz3m2J6MGZq8trlnADEBFLrK.". Details: "File not found: 1n7h04M6Rpz3m2J6MGZq8trlnADEBFLrK.">

Cependant le fichier existe et le même code fonctionne sur les fichiers de mon espace personnel. J'ai un accès complet au disque d'équipe, comme vous pouvez le voir dans le code, je suis capable d'interroger des fichiers et de créer des dossiers à l'intérieur.

Qu'est-ce qui pourrait manquer? Ou y a-t-il une meilleure façon de mettre en œuvre cela?

Tanaike

Points de modification:

  • D'après votre question, il semble qu'il service.files().listne se produit aucune erreur. En utilisant ces informations, à partir fields='nextPageToken, files(id, name, mimeType)'de service.files().list, c'est fou.nd que vous utilisez servicecomme Drive API v3.
  • Lorsque vous utilisez l'API Drive v3, votre demande de service.files().copydoit être modifiée.
    1. titleest name.
    2. 'parents': [{'kind': "drive#fileLink", 'id': dst_parent_id}]est 'parents': [dst_parent_id].
  • Et aussi, 'supportsAllDrives': Truen'est pas inclus dans le corps de la demande. Je pense que c'est la raison de votre message d'erreur.

Lorsque les points ci-dessus sont reflétés dans votre script, cela devient comme suit.

Script modifié:

De:
clone = service.files().copy(fileId=file.get('id'),
                     body={'title': 'copiedFile',
                           'parents': [{'kind': "drive#fileLink",
                                        'id': dst_parent_id}],
                           'supportsAllDrives': True,
                           }).execute()
À:
clone = service.files().copy(fileId=file.get('id'),
                             body={'name': 'copiedFile',
                                   'parents': [dst_parent_id],
                                   },
                             supportsAllDrives=True).execute()

Référence:

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

L'API Google Drive télécharge un fichier dans le Drive d'équipe en Javascript

Comment créer un dossier dans un Drive d'équipe avec l'API Google?

Obtenez le contenu d'un fichier spécifique dans l'API Google Drive avec NodeJS

Google Team Drive Déplacer le fichier entre les dossiers du Drive d'équipe à l'aide d'Apps Script

Comment télécharger un fichier à partir d'une exportation dans l'API Google Drive sans enregistrer le fichier

Impossible de mettre à jour le lien de la miniature d'un fichier dans l'API Google Drive v3

Impossible d'ouvrir le fichier importé dans Google Drive à l'aide de l'API

Exception d'autorisation lors de l'insertion d'un fichier dans Google Drive Rest Api Java

Copie de Google Drive, Drive d'équipe (Service) vers Mon Drive (utilisateur)

Téléchargement d'un fichier depuis Google Drive dans le client Javascript

Résultats de l'API REST Google Drive incomplets pour les fichiers de Drive d'équipe

Comment puis-je faire une copie d'un fichier dans Google Drive via Python?

Google Apps Script déplacement du fichier vers le dossier du Drive d'équipe

Exemple pas le format de Request raw Body pour le téléchargement d'un fichier dans l'API Google Drive

Existe-t-il un moyen d'obtenir le nom d'un fichier à l'aide de l'API Google Drive?

Échec de l'obtention d'un fichier dans Google Apps Script à l'aide de l'API Drive

Créer un dossier dans la direction racine et télécharger le fichier dans ce dossier google drive api

Le dossier getParents ne parvient pas à obtenir le nom du Drive d'équipe dans Google Script

Copie d'un fichier Excel de Google Drive vers un dossier nouvellement créé à l'aide de l'éditeur de script

Comment accéder à Stackdriver Logging pour un script Google Apps dans un Drive partagé (d'équipe)?

Problèmes d'autorisations lors du téléchargement dans le Drive d'équipe

Est-il possible de mettre le fichier SQLite dans Google Drive et d'utiliser l'API Google Drive pour mettre à jour ses données ?

Comment mettre à jour un fichier zip dans Google Drive à l'aide de l'API Javascript de Google Drive

Télécharger le fichier dans le dossier Google Drive à l'aide du script d'application

Importer un fichier dans un lecteur google spécifié avec l'API Google Drive

Comment joindre un fichier Google Drive dans un message et l'envoyer via l'API Gmail (sans télécharger le fichier)?

Comment puis-je accéder à un Drive d'équipe au lieu de Google Drive personnel à l'aide de PyDrive?

Téléchargez le fichier du lecteur pour le téléverser dans un autre lecteur à l'aide de l'API Google Drive dans Android Studio

L'API Google Drive n'écrit pas le corps dans le fichier

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive