ça marche impec!
[EDIT : suite à mauvaise manip (j’ai fermé le fil en cliquant sur “Solution” avant d’avoir posté ma réponse et le forum n’en veut plus… je poste donc ma réponse là où l’ai la main…]
Version=4.0.P25
BuiltOn=2021-05-04 23:26 (revision fc264504a796dafe39e855086c681bc359140df6)
Tout fonctionne parfaitement comme attendu
Merci beaucoup (comme d’habitude) pour ton support efficace et infaillible!
J’ai encapsulé l’instanciation du cst dans ma propre classe S3Tool car je vais y ajouter des méthodes permettant de générer des formulaires d’upload direct vers la bucket depuis le browser en générant un form intégrant une politique signée (cf. javascript - Amazon S3 direct file upload from client browser - private key disclosure - Stack Overflow).
Le formulaire étant servi par un objet externe habilité, nous pourrons intégrer son usage dans le modèle d’habilitation standard. Notre bucket S3 servira de zone d’échange avec plusieurs métiers et je ne souhaite pas exp(l)oser la plateforme si un bourrin dépose un fichier de taille non supportée ou avec un contenu pouvant être compromettant.
L’étape suivante sera d’explorer les possibilités de post traitements (fonctions lambda) pour déléguer à la couche storage S3 le fait de valider le fichier. Simplicité n’aura ainsi plus qu’à faire un get du fichier déposé et validé auparavant en y appliquant le traitement prévu (import ou autre).
Nous envisageons aussi de servir des url d’accès (get) pré-signées pour permettre aux utilisateurs habilités de récupérer des fichiers déposés (éventuellement par un traitement d’export Simplicité) sans traverser le backend.
Voici le dernier code testé qui fonctionne très bien :
public Boolean put(ExternalObject _this, JSONObject config, String file, String content, String mime) {
CloudStorageTool cst = null;
Boolean success = true;
try {
cst = new CloudStorageTool(config);
cst.put(new JSONObject()
.put("name", file)
.put("mime", mime != null ? mime : HTTPTool.MIME_TYPE_DATA)
.put("encoding", Globals.getPlatformEncoding())
.put("content", content)
);
} catch (Exception e) {
AppLog.error(_this.getClass(), "BCSIS3Toolbox.put", null, e, _this.getGrant());
success = false;
} finally {
if (cst != null) cst.close();
}
return success;
}
public JSONObject get(ExternalObject _this, JSONObject config, String name, Boolean read) {
CloudStorageTool cst = null;
JSONObject file = null;
try {
cst = new CloudStorageTool(config);
file = cst.get(name,read);
} catch (Exception e) {
AppLog.error(_this.getClass(), "BCSIS3Toolbox.get", null, e, _this.getGrant());
} finally {
if (cst != null) cst.close();
}
return file;
}