在数据库中转换嵌入的图片

我有一个’小’的问题。 在数据库文档中包含richtextfield。 richtextfield包含某个联系人的个人资料图片。 问题是这个内容没有保存为mime,因此我无法计算图像的url。

我正在使用pojo从人员配置文件中检索数据,并在我的xpage控件中使用它来显示其内容。 我需要构建一个转换代理,它接受richtextitem的内容并将其转换为mime,以便能够计算类似于url的内容

http://sofzh.miximages.com/java/tln(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); 

现在已经有一段时间了,我没有沿着将现有数据转换为mime的路线走下去。 我无法让它工作,经过一些更多的研究似乎没有必要。 因为问题是关于显示绑定到richtextbox的图像我做了一些关于如何计算图像的URL的研究,我想出了以下几行代码:

 function getImageURL(doc:NotesDocument, strRTItem,strFileType){ if(doc!=null && !"".equals(strRTItem)){ var rtItem = doc.getFirstItem(strRTItem); if(rtItem!=null){ var personelDB = doc.getParentDatabase(); var dbURL = getDBUrl(personelDB); var imageURL:java.lang.StringBuffer = new java.lang.StringBuffer(dbURL); if("file".equals(strFileType)){ var embeddedObjects:java.util.Vector = rtItem.getEmbeddedObjects(); if(!embeddedObjects.isEmpty()){ var file:NotesEmbeddedObject = embeddedObjects.get(0); imageURL.append("(lookupView)\\"); imageURL.append(doc.getUniversalID()); imageURL.append("\\$File\\"); imageURL.append(file.getName()); imageURL.append("?Open"); } }else{ imageURL.append(doc.getUniversalID()); imageURL.append("/"+strRTItem+"/"); if(rtItem instanceof lotus.domino.local.RichTextItem){ imageURL.append("0.C4?OpenElement"); }else{ imageURL.append("M2?OpenElement"); } } return imageURL.toString() } } } 

它将检查给定的RT字段是否存在。 如果是这种情况,它会假设一些事情:

  • 如果rtfield中有文件,则第一个文件是要显示的图片
  • 否则它将创建一个指定的URL,如果该项是Rt类型,那么它将假设它是一个mime实体并将生成另一个url。

不确定这是否是一个答案,但我似乎还没有添加评论。 您确认自己的信息流中有什么内容吗?

if (stream.getBytes() != 0) {

这个问题无法在Java中“理想地”解决。

1)如果你转换为MIME,你搞砸了原始的Notes富文本。 MIME仅允许对原始内容进行悲伤的近似; 这可能或不重要。

如果重要的话,可以将原始字段的副本转换为仅用于显示目的的MIME,或者使用DXL将其删除并单独存储 – 但是这种方法再次意味着每当有人更改原始图像时出现同步问题转发项目。

2)通常不可能根据接受的自答案中的OP代码计算URL,因为该示例中的常数0.C4涉及RT项的二进制数据中的图像的偏移。 这意味着富文本字段的任何其他设计,手动输入的图像,由不同版本的Notes创建 – 都会影响偏移。

3)只能通过使用允许调查富文本项中的二进制数据的C API来正确计算URL。 这不能通过Java完成。 IMO(没有建立JNI桥梁等)