Insertion d'une image dans un template HTML

J’utilise les information de ce fil pour construire un publipostage :

Mon publipostage contient une image. Pour l’instant, la seule solution que j’ai trouvée est de l’intégrer au format base64 dans le template.
Néanmoins, ce template construit le code html utilisé dans le widget markdown pour chaque ligne (1300 dans ma table) et fait donc exploser la taille du fichier et grève ses performances.
Voyez-vous une façon plus économe de procéder ?
NB : je ne peux pas stocker cette image (signature) sur un espace ouvert

Si il est acceptable de rendre le document Grist public, il existe un moyen.

Via l’API publique

étape 1
Utiliser cette formule pour générer l’url

# extraction de l'url et de l'id du document
url, end = SELF_HYPERLINK().split("/o/docs")
doc_id = end.split("/")[1]
# extraction du premier attachment (changer le nom de la colonne si besoin)
if not $Signature:
    return None
attach_id = $Signature.id[0]
# utilisation de l'API pour visualiser la signature
return f"{url}/api/docs/{doc_id}/attachments/{attach_id}/download"

Étape 2: utiliser la syntaxe propre au markdown avec cette url dans le template, par exemple

Signature:
![]({signature})

Étape 3: ajouter la colonne de l’url généré dans le template.

Malheuresement, cette astuce d’accéder via l’API ne fonctionne que si le document est publique. Autrement, la partie de votre navigateur responsable d’afficher le markdown ne sait pas comment communiquer de manière sécurisée avec Grist.

En récupérant le « session ID » Voir une meilleure solution plus bas

Si vous cliquez sur l’attachment Grist et que vous regardez l’URL, vous observerez quelque chose comme:

https://grist.simone-de-beauvoir.indiehosters.net/dw/10-244-149-34/v/unknown/o/docs/attachment?clientId=08fc984fb604b837&docFD=0&name=bycicle.jpg&rowId=1&colId=A&tableId=Table1&maybeNew=1&attId=1

Grist ne propose pas de fonction pour générer cette url à partir de l’attachment, mais on peut le bricoler à la main.
Pour générer cette url, on a besoin de:

  • l’URL (:white_check_mark:, via SELF_HYPERLINK())
  • le chemin d’accès (:thinking: dw/10-244-149-34/v/unknown semble obscur, mais il ne devrait pas changer au cours du temps
  • le nom (:white_check_mark: via $Signature[0].fileName)
  • le rowId (:white_check_mark: via $Signature[0]._row_id)
  • la table (:white_check_mark: on la connait)
  • l’attribute ID (:white_check_mark: via $Signature.id)
  • le clientId (:x:)

Le problème, c’est le clientId. C’est un token qui est généré à la volée par Grist pour que le navigateur puisse afficher des images depuis un document non public.
Une procédure possible est celle ci:

  • créer une table spéciale Client_id_data avec une unique cellule qui accueillera une URL
  • à chaque connexion au document Grist, cliquer sur une des signatures, cliquer sur « copier le lien » et coller le résultat dans cette cellule
  • extraire la partie « clientID » de cette URL
  • utiliser cette donnée avec Client_id_data.lookupOne().cliend_id pour reconstituer l’URL

C’est un peu lourd et « hacky », mais c’est la seule possibilité que je connaisse.

En utilisant mon nouveau widget !

Je trouvé ce cas d’usage très intéressant, j’ai donc créé un widget pour remplir cette mission.
Il génère des liens à la volée pour les attachments. Je me suis inspiré de la documentation Grist: grist-plugin-api - Grist Help Center
Le widget est disponible ici. Normalement il est intuitif à utiliser.
https://rambip.github.io/grist-attachment-widgets

1 « J'aime »