Télécharger plusieurs fichiers depuis SharePoint

Salut à tous,
J’essaie de télécharger tous les fichiers d’un dossier SharePoint spécifique (par ex. /Shared Documents/Dana) en utilisant n8n.

Ce que j’ai fait

  1. Microsoft SharePoint node → Resource: Item → Operation: Get Many

    • Cela retourne les éléments avec succès.
    • J’ai également filtré par dossier (je ne veux que les fichiers sous /Dana).
  2. Ensuite, je boucle sur les résultats avec Loop Over Items / Split In Batches et j’essaie :

    • Microsoft SharePoint node → Resource: File → Operation: Download
    • Mais le node ne supporte que « By ID » (pas d’option « By path » dans ma version), donc j’ai besoin d’un ID de fichier.

Ce que je vois dans la sortie « Get Many Items »

Chaque enregistrement retourné a des champs comme :

  • id : 1 (semble être un id d’élément de liste)
  • webUrl : https://.../Shared%20Documents/Dana/sample.txt
  • contentType.id : 0x0120... (type de contenu)
  • parentReference.id : c5c59b33-8fc3-44a5-915f-9c608c03731c
  • parentReference.siteId : elbitsystems.sharepoint.com,0f496d07-...,303451ee-...
  • parentReference.listId : ecc55e50-...

Le problème

Quand j’essaie de télécharger en utilisant le node SharePoint File → Download :

  • Passer webUrl échoue (ID attendu)
  • Passer id échoue (semble être un id d’élément de liste, pas un id de fichier/driveItem)
  • Passer contentType.id échoue (pas un id de fichier)
  • Passer parentReference.id échoue (ressemble à un id de dossier parent)

J’obtiens toujours :

  • 400 Bad request – veuillez vérifier vos paramètres

Comment je peux vous aider

  • Comment puis-je obtenir le file/driveItem ID correct à partir de la sortie « Get Many Items (Item resource) » pour pouvoir l’utiliser dans File → Download ?
  • Ou quel est le flux de travail recommandé dans n8n pour télécharger tous les fichiers d’un dossier :
    • Dois-je utiliser une ressource SharePoint différente (File au lieu de Item) ?
    • Ou dois-je utiliser un node HTTP Request avec Microsoft Graph pour télécharger par chemin ?

Version n8n : 2.18.7 (auto-hébergée)
Node : n8n-nodes-base.microsoftSharePoint (dernière version affichée dans l’interface)

Bonjour @dana_bida

Au lieu d’utiliser la ressource « Item » pour trouver vos fichiers, utilisez la ressource « File ». Cela garantit que les ID retournés sont compatibles avec l’opération de téléchargement.

  1. Remplacez votre premier nœud :
    • Resource : File
    • Operation : List
  2. Configurez le dossier :
    • Dans l’opération « List », vous pouvez spécifier le chemin du dossier ou son ID. Puisque vous voulez /Shared Documents/Dana, assurez-vous de cibler ce dossier spécifique.
  3. La sortie :
    • L’id retourné par Resource: File → Operation: List est l’ID DriveItem.
  4. Le nœud de téléchargement :
    • Passez cet id directement à Resource: File → Operation: Download. Cela résoudra maintenant l’erreur 400 Bad Request.

Si l’opération « File → List » intégrée ne vous donne pas le filtrage exact dont vous avez besoin, vous pouvez utiliser directement l’API Microsoft Graph. C’est souvent plus fiable pour les structures de dossiers complexes.

Étape 1 : Lister les fichiers du dossier Utilisez un nœud HTTP Request :

  • Method : GET
  • URL : https://graph.microsoft.com/v1.0/sites/{{siteId}}/drive/root:/Shared Documents/Dana:/children
    • (Remplacez {{siteId}} par votre ID de site ou utilisez le format nom d’hôte/chemin du site).
  • Authentication : Utilisez les mêmes identifiants SharePoint/Microsoft.

Étape 2 : Boucler et télécharger La réponse contient un tableau value. Chaque objet dans ce tableau possède un champ id. Cet id est le driveItemId.

  • Passez cet id à votre nœud existant Microsoft SharePoint → Resource: File → Operation: Download.

Cela vous aide-t-il ?

@dana_bida l’ID de Item → Get Many est l’ID de l’élément de liste, mais Download veut l’ID driveItem, c’est ton 400. La solution la plus simple est de passer complètement le nœud de téléchargement, l’appel Graph children te donne déjà un lien de téléchargement pré-signé par fichier, tu fais juste un GET dessus, pas besoin de jongler avec les IDs :

remplace SITE_ID par le parentReference.siteId que tu vois déjà dans ton output, réutilise tes identifiants SharePoint OAuth existants sur le premier nœud, et laisse l’authentification du nœud de téléchargement sur None puisque l’URL est déjà pré-signée. si ce lien de téléchargement revient jamais vide (l’authentification en mode application uniquement fait ça), pointe ce nœud sur /sites/SITE_ID/drive/items/{{ $json.id }}/content avec tes identifiants attachés à la place.

après avoir obtenu la liste des fichiers, ajoutez un nœud Filter sur le fichier existant dans la réponse (c’est-à-dire que {{ $json.file }} n’est pas vide) pour exclure automatiquement les sous-dossiers de votre boucle, sinon l’étape de téléchargement échouera sur les éléments de dossier qui s’infiltrent dans la réponse children.