Custom widget et pièces jointes

Bonjour,
J’affiche les données d’une table qui contient des pièces jointes dans un custom widget, je voudrais que les utilisateurs puissent télécharger la (ou les) pièce(s) jointe(s) en cliquant sur un bouton.
J’arrive à voir quand une pièce a été déposée, mais quand on clique sur le lien généré on a une erreur 404 qui renvoie vers Github :

Mon code :
// Création du lien pour le téléchargement lde la pièce jointe
const attachmentUrl = record.Ressources || ‹  ›;
const downloadSection = document.getElementById(‹ piece_jointe ›);
if (attachmentUrl) {
const link = document.createElement(‹ a ›);
link.href = attachmentUrl;
link.textContent = ‹ Télécharger la pièce jointe ›;
link.target = ‹ _blank ›;
link.style.padding = ‹ 10px ›;
link.style.backgroundColor = ‹ #005f99 ›;
link.style.color = ‹ white ›;
link.style.textDecoration = ‹ none ›;
link.style.borderRadius = ‹ 4px ›;
link.style.width = ‹ 220px ›;
downloadSection.appendChild(link);
} else {
downloadSection.textContent = ‹ Aucune pièce jointe disponible. ›;
}
Le message d’erreur :

Y a-t-il moyen de voir ces pièces jointes ?

Merci de votre retour

Bonjour, la solution doit se trouver dans ce fil de discussion : Accessing attachments from Custom Widget builder - Developers - Grist Creators

Bonjour,

Merci pour le tuyau. J’ai réussi à faire ce que je voulais.

Appel de la fonction

grist.onRecord(function (record) {
if (record.Ressources) {

updateAttachment(record.Ressources);

}

Fonction appelée

// Affichage et téléchargement de la pièce jointe
async function updateAttachment(attachments) {
const container = document.getElementById(‹ piece_jointe ›);
const imgElement = document.getElementById(‹ img ›);
const downloadLink = document.getElementById(‹ download_link ›);

// Réinitialiser l'affichage
imgElement.style.display = 'none';
downloadLink.style.display = 'none';
container.style.display = 'none';

if (!attachments || !Array.isArray(attachments) || attachments.length === 0) {
  return;
}

try {
  const tokenInfo = await grist.docApi.getAccessToken({ readOnly: true });
  const attachmentId = attachments[0];
  const attachmentUrl = `${tokenInfo.baseUrl}/attachments/${attachmentId}/download?auth=${tokenInfo.token}`;

  // Définir l'URL de téléchargement
  downloadLink.href = attachmentUrl;

  // Essayer d'afficher comme une image
  imgElement.src = attachmentUrl;
  imgElement.onload = () => {
    // Si c'est une image, afficher uniquement l'image
    imgElement.style.display = 'block';
    container.style.display = 'block';
  };

  imgElement.onerror = () => {
    // Si ce n'est pas une image, afficher uniquement le lien de téléchargement
    imgElement.style.display = 'none';
    downloadLink.style.display = 'block';
    container.style.display = 'block';
  };
} catch (error) {
  console.error('Erreur accès attachement:', error);
  container.style.display = 'none';
}

}

1 « J'aime »

Bonjour,

Je vous propose ce petit bouton permettant de choisir les colonnes dans lesquelles nous souhaitons pouvoir télécharger les pièces joints par ligne ainsi que la sélection de la ligne permettant de nommer le fichier en .zip.

A utiliser avec un custom widget URL :
https://rovel-coder.github.io/CustomWidget_download_attachement/

Cordialement,