Comment accéder au nom d'une pièce jointe

Bonjour,

Pour faciliter la recherche et l’analyse de documents joints, j’avais besoin d’accéder au nom des pièces jointes intégrées dans Grist. En cherchant sur le forum international j’ai découvert l’existence d’une propriété non documentée donc je la partage ici également.

Si on crée une colonne « PJ » de type pièce jointe, alors on peut accéder au nom du fichier dans une autre colonne de type formule avec la formule suivante : $PJ.fileName

4 « J'aime »

Merci pour ce partage !

D’autres informations sont disponibles également :

  • fileSize : Taille du fichier en octet
  • fileType : Type de fichier (peut être vide en fonction du type)
  • fileExt : Extension du fichier (« .png » par exemple)
  • imageHeight : Hauteur de l’image (rempli si le fichier est une image)
  • imageWidth : Largeur de l’image (rempli si le fichier est une image)
  • timeUploaded : Timestamp de la date et heure de téléchargement du fichier
2 « J'aime »

Bonjour, est-il possible de récupérer l’URL de l’image? En vous remerciant

Bonjour, voici la réponse courte (en anglais) Attachement url for html_widget - #2 by paul-grist - Ask for Help - Grist Creators et le petit tuto en français que je me suis fait :

  1. Cliquer sur l’image, clic-droit sur le bouton Download et copier l’adresse de téléchargement sous la forme https://grist.numerique.gouv.fr/dw/10-42-8-132/v/unknown/o/nom_du_doc_grist/attachment?clientId=17aff54f5cc621f4&docFD=0&name=image.png&rowId=1&colId=C&tableId=TXT&maybeNew=1&attId=12
  2. dans l’URL, repérer l’identifiant de la pièce-jointe noté attId (12 dans l’exemple ci-dessus) ; c’est le même identifiant qu’on obtient avec la formule $PJ.id
  3. Ouvrir la console API, chercher la méthode Download du tag attachments, cliquer dessus puis sur le bouton « Try it out », sélectionner le document Grist concerné à l’aide du menu déroulant et entrer l’identifiant de la PJ dans le champ attachmentId, cliquer sur le bouton « Execute » et copier l’URL de l’image de la forme https://grist.numerique.gouv.fr/api/docs/jtrTwzejX111do4kUM9yi5/attachments/12/download

Merci beaucoup! Je vais tester ça.

J’ai testé et je vous en remercie, cela fonctionne. Je suis encore en plein dans les apprentissages sur Grist mais si j’ai bien compris, on utilise un token temporaire, donc ce n’est pas une solution pour un affichage pérenne de la PJ (image) basé sur l’URL par exemple (dans un widget HTML)? Je lis sur les forums anglais une histoire de fonction « grist.getAccessToken() » et « grist.getAttachmentUrl() » mais cela ne semble pas fonctionner sur mon instance. Je suis preneuse en cas d’idées, et je continue mes tests également! Merci

Si si, l’URL obtenue de cette manière est pérenne (ça marche chez moi depuis plusieurs mois sans discontinuer).

Le token sert dans le cas où le document grist est privé, car il faut alors pouvoir s’authentifier.

Bonjour,

Exemple pratique pour récupérer l’URL.

Colonne ImagePJ
Colonne ImageUrl

Dans la colonne ImageUrl il faut écrire une fonction avec retour qui va vérifier si $ImagePJ existe (donc si le nombre de pièces jointes est supérieur à 0).

Dans ce cas on va retourner une chaîne de caractères, donc on écrit f suivi de la formation de la chaîne url entre simple quotes, et la variable à injecter entre { } ce qui donne :

if len($ImagePJ) > 0:
  return f'https://grist.numerique.gouv.fr/api/docs/DOCID/attachments/{$Image[0].id}/download'

Remplacer DOCID par l’ID du document, que l’on trouvera dans Paramètres → API → ID du document

On note que pour récupérer l’id de la pièce jointe il faut écrire $Image[0].id et non $Image.id car $Image retourne une liste, dont on prend le premier élément [0].

2 « J'aime »

Je suis aussi assez mitigé par l’idée d’utiliser un token temporaire.

Selon le cas d’usage, il y a 2 solutions:

  • Si le contenu du document, et en particulier les images, a vocation a être mis en public, on peut utiliser un lien via l’API. Il suffit de copier-coller cette formule:
# extract url and document ID
url, end = SELF_HYPERLINK().split("/o/docs")
doc_id = end.split("/")[1]
# extract first attachment.
if not $Attachment:
    return None
attach_id = $Attachment.id[0]
# use API to provide attachment URL
return f"{url}/api/docs/{doc_id}/attachments/{attach_id}/download"