J'ai un «petit» problème. Dans une base de données, les documents contiennent un champ de texte riche. Le champ richtext contient une image de profil d'un certain contact. Le problème est que ce contenu n'est pas enregistré comme mime et donc je ne peux pas calculer l'URL de l'image.Convertir des images incorporées dans la base de données
J'utilise un pojo pour récupérer des données du profil de la personne et l'utiliser dans mon contrôle xpage pour afficher son contenu. Je dois construire un agent de conversion qui prend le contenu de la richtextitem et la convertit en mime pour pouvoir calculer quelque chose url comme
http://host/database.nsf/($users)/D40FE4181F2B86CCC12579AB0047BD22/Photo/M2?OpenElement
Quelqu'un pourrait-il me aider à convertir le contenu du richtextitem à mimer? Lorsque je vérifie les objets incorporés dans le champ rt, il n'y en a pas. Lorsque j'obtiens le contenu du champ en tant que flux et que je l'enregistre dans un nouveau champ richtext en utilisant le code suivant. Mais le nouveau champ n'est pas créé en quelque sorte.
System.out.println("check if document contains a field with name "+fieldName);
if(!doc.hasItem(fieldName)){
throw new PictureConvertException("Could not locate richtextitem with name"+fieldName);
}
RichTextItem pictureField = (RichTextItem) doc.getFirstItem(fieldName);
System.out.println("Its a richtextfield..");
System.out.println("Copy field to backup field");
if(doc.hasItem("old_"+fieldName)){
doc.removeItem("old_"+fieldName);
}
pictureField.copyItemToDocument(doc, "old_"+fieldName);
// Vector embeddedPictures = pictureField.getEmbeddedObjects();
// System.out.println(doc.hasEmbedded());
// System.out.println("Retrieved embedded objects");
// if(embeddedPictures.isEmpty()){
// throw new PictureConvertException("No embedded objects could be found.");
// }
//
// EmbeddedObject photo = (EmbeddedObject) embeddedPictures.get(0);
System.out.println("Create inputstream");
//s.setConvertMime(false);
InputStream iStream = pictureField.getInputStream();
System.out.println("Create notesstream");
Stream nStream = s.createStream();
nStream.setContents(iStream);
System.out.println("Create mime entity");
MIMEEntity mEntity = doc.createMIMEEntity("PictureTest");
MIMEHeader cdheader = mEntity.createHeader("Content-Disposition");
System.out.println("Set header withfilename picture.gif");
cdheader.setHeaderVal("attachment;filename=picture.gif");
System.out.println("Setcontent type header");
MIMEHeader cidheader = mEntity.createHeader("Content-ID");
cidheader.setHeaderVal("picture.gif");
System.out.println("Set content from stream");
mEntity.setContentFromBytes(nStream, "application/gif", mEntity.ENC_IDENTITY_BINARY);
System.out.println("Save document..");
doc.save();
//s.setConvertMime(true);
System.out.println("Done");
// Clean up if we are done..
//doc.removeItem(fieldName);
Avez-vous essayé de changer le champ RT pour mimer et ré-enregistrer les documents? –
Oui, cela fait l'affaire quand je le fais manuellement. Mais il y a +/- 200 documents et je ne veux pas enregistrer et les fermer par et si je n'ai pas besoin;) – jjtbsomhorst
Pouvez-vous faire doc.computewithform (...) et les enregistrer, et après cela accéder aux données mime dans votre code java? –