QGIS : Nom De Fichier Pour Champs BLOB Dans Formulaire
Salut les amis géomaticiens ! Vous est-il déjà arrivé de vous arracher les cheveux en essayant de gérer des fichiers binaires (BLOB) directement dans QGIS, et plus particulièrement de récupérer le nom du fichier lorsque vous insérez ou mettez à jour ces données dans un champ bytea ? Eh bien, vous n'êtes pas seuls ! C'est un petit casse-tête, mais rassurez-vous, il existe des solutions pour dompter cette bête. On va plonger ensemble dans les entrailles de QGIS et PostgreSQL pour vous montrer comment faire, histoire que votre flux de travail soit aussi fluide qu'une rivière alpine.
La problématique des champs BLOB et des noms de fichiers dans QGIS
Alors, on est là , tranquilles, avec notre table PostgreSQL blob_storage. Elle a trois champs bien gentils : blob_id pour l'identifiant, blob_body pour stocker nos précieux octets (le fichier quoi !), et blob_name pour y mettre le nom du fichier. Jusque-là , tout va bien. Le hic, c'est quand on se retrouve dans l'éditeur d'attributs de QGIS, prêt à uploader un petit fichier dans le champ blob_body. QGIS, dans sa grande sagesse, nous permet de sélectionner un fichier et de l'insérer dans le champ bytea. Super ! Mais quand on fait ça, seul le contenu binaire du fichier est stocké dans blob_body. Le nom du fichier, lui, reste désespérément vide dans notre champ blob_name. Et c'est là que le bât blesse, parce que qui veut stocker des données sans savoir à quoi elles correspondent ? Personne, les gars ! Avoir le nom du fichier, c'est hyper important pour retrouver l'info plus tard, pour le tri, pour le classement, bref, pour garder une trace claire de ce qu'on fait. On veut que QGIS fasse un peu plus d'efforts, qu'il soit assez malin pour récupérer le nom du fichier quand on le charge, et qu'il le copie dans notre champ blob_name. Ça paraît simple, mais la configuration par défaut de QGIS ne le fait pas. Il faut un petit coup de pouce, une astuce, une configuration spéciale pour que ça roule. Imaginez devoir renommer manuellement chaque fichier après l'avoir uploadé, juste pour qu'il corresponde à ce qu'il y a dans la base de données. Ce serait la loose totale, un vrai cauchemar en termes de productivité. L'objectif est donc de faire en sorte que QGIS remplisse automatiquement le champ blob_name avec le nom du fichier sélectionné, et ce, dès l'insertion ou la mise à jour. On va explorer comment y parvenir en utilisant les fonctionnalités de QGIS, notamment la configuration des champs et potentiellement un peu de code, pour résoudre ce problème de manière élégante et efficace. Fini les données orphelines, bonjour l'organisation !
Solution 1 : La puissance des expressions dans QGIS
Alors, comment on s'y prend, concrètement, pour que QGIS nous sorte le nom du fichier comme un grand ? La première astuce, et souvent la plus simple quand elle fonctionne, c'est d'utiliser la puissance des expressions de QGIS directement dans la configuration de la forme d'attributs. Pour chaque champ de votre table, QGIS vous permet de définir comment il doit se comporter dans l'éditeur d'attributs. C'est là qu'on va jouer ! Pour notre champ blob_name, on va lui dire : "Hé, quand tu reçois un fichier dans le champ blob_body, regarde quel est le nom de ce fichier et mets-le dans mon champ blob_name !" Comment on fait ça ? Facile ! Ouvrez les propriétés de votre couche dans QGIS, allez dans l'onglet "Champs", et trouvez votre champ blob_name. Cliquez sur l'icône d'engrenage pour accéder aux "Paramètres du widget" ou "Widget Settings". Ici, on va changer le type de widget. Au lieu d'un simple champ texte, on va utiliser un widget qui permet des expressions. Le plus souvent, c'est le widget "Champ de saisie de texte" (Text Edit) ou "Champ de saisie de valeur" (Value Map), mais le secret est dans la configuration de l'expression par défaut. Dans le champ "Expression par défaut" (Default Value), on va mettre une formule magique. Cette formule va dire à QGIS : "Prends le nom du fichier qui vient d'être chargé et utilise-le comme valeur pour ce champ". L'expression clé ici est généralement $file_name ou quelque chose de similaire, mais attention, ça dépend un peu de la manière dont le champ BLOB est configuré dans QGIS. Si vous utilisez le widget "Attachment" (Pièce jointe) pour le champ blob_body, QGIS est souvent plus intelligent. Quand vous ajoutez ou modifiez une pièce jointe, il peut automatiquement gérer le nom. Mais si vous utilisez un widget plus générique pour gérer le bytea, il faut une expression explicite. L'expression exacte peut varier, mais cherchez quelque chose qui référence le champ blob_body et en extrait le nom. Par exemple, si votre champ BLOB s'appelle blob_body dans l'interface de QGIS, vous pourriez avoir une expression comme regexp_replace(attribute( 'blob_body' ), '^.*/([^/]+)