Télécharger un fichier à partir d'une URL
La méthode suivante permet de télécharger un fichier depuis une URL, de le convertir en base64, puis (optionnellement) de l’écrire directement dans un champ d’un enregistrement Open-Prod. Cela peut servir par exemple dans une action serveur pour alimenter une pièce jointe à partir d’un lien externe.
| Méthode / Exemple | Données d'entrée | Données de sortie |
|
mf_downloadfile_to_field(url, recordset=False, field=False) |
Paramètres : - url (str, obligatoire) : URL du fichier à télécharger - recordset (Model, optionnel) : enregistrement cible - field (str, optionnel) : nom du champ à écrire Règles : - fournir les 2 paramètres recordset + field, ou aucun des deux - extensions bloquées : .exe, .dll, .msi, .bat, .cmd, .ps1, .sh, .js, .jar, .vbs, svg, html, htm, xhtml, xml - timeout de téléchargement : 30 secondes - taille maxi fichier 10 mo |
- retourne le contenu du fichier encodé en base64 (bytes) - si recordset + field sont fournis : écriture automatique dans le champ ciblé - contrôles inclus : URL vide, paramètres incohérents, recordset invalide, enregistrement inexistant, champ inconnu, type de fichier dangereux, erreur de téléchargement |
| Comportement en erreur |
Cas typiques : - URL absente - recordset sans field (ou l'inverse) - extension ou contenu interdite - URL inaccessible / erreur HTTP / timeout - field absent du modèle cible |
La méthode lève une ValidationError (ou Warning pour extension dangereuse). |
Exemple : dans une action serveur
Exemple 1 :
url = "https://www.1life.fr/wp-content/uploads/2023/12/1Life-LOGO.png"
target_records = env['product.product'].browse(2)
env['mf.tools'].mf_downloadfile_to_field(url, target_records, 'picture')
Exemple 2 :
url = "https://www.1life.fr/wp-content/uploads/2023/12/1Life-LOGO.png"
target_records = env['product.product'].browse(2)
image=env['mf.tools'].mf_downloadfile_to_field(url)
target_records.write({'picture':image})
Remarque : le champ cible doit exister sur le modèle et être adapté au stockage d’un contenu base64 (généralement un champ binaire).