我有一个旧的Notes客户端应用程序。表单上有两个包含附件的RichText字段。JPG,PDF,随便吧。该文档还包含唯一的密钥和其他元数据.
我想要做的是从一个文档上的多个附件迁移到每个附件的一个新文档。我从来没有在嵌入式对象上做过很多事情,更没有对MIME做过太多。
我目前使用的是XPages Java,但如果需要的话可以转到LotusScript。
我在处理这个片段:
List<EmbeddedObject> docPicture = this.getFileAttachments(doc, "picture");
List<EmbeddedObject> docPDF = this.getFileAttachments(doc, "pdf");
for (EmbeddedObject eoPic : docPicture) {
picCount++;
Document newDoc = currentDatabase.createDocument();
newDoc.replaceItemValue("form", "fm_file");
newDoc.replaceItemValue("uploadToken", doc.getItemValueString("barCodeHuman"));
newDoc.replaceItemValue("fileName", eoPic.getName());
newDoc.replaceItemValue("size", eoPic.getFileSize());
fileName = eoPic.getName();
fileType = fileName.substring(fileName.length() - 3);
newDoc.replaceItemValue("type", this.getMIMEType(fileType));
// Extract Attachment and Add To Attachment Document
InputStream attachInputStream = eoPic.getInputStream();
Stream attachStream = session.createStream();
attachStream.setContents(attachInputStream);
MIMEEntity attachField = newDoc.createMIMEEntity("attachment");
MIMEHeader attachHeader = attachField.createHeader("content-disposition");
attachHeader.setHeaderVal("attachment;filename=\"" + eoPic.getName() + "\"");
attachField.setContentFromBytes(attachStream, this.getMIMEType(fileType), MIMEEntity.ENC_IDENTITY_BINARY);不管怎么说-这几乎成功了。我拿到了我的文件-每个附件一份。但是,当进入文档属性中的字段“附件”时,它不是一个RichTextField,而是一个MIME。这可能是我下一个项目阶段的原因。RichTextDocuments工作得很好,但哑剧不起作用。
这是一个1次迁移需要,所以任何想法,我可以如何结束RichTextFields将不胜感激。谢谢!!
发布于 2014-06-27 19:03:02
尽量完全不涉及mime实体。正如奥利弗所说,检查表单上的目标richText字段时,没有检查“存储内容作为mime”。您甚至可以使用richText lite字段并将其限制在附件中。
我认为您可能使用MIMEEntity方法setContentsFromStream,因为您希望将附件从文档直接移到文档中?如果您只想使用RichText嵌入式对象(不涉及mime实体)进行移动,那么首先需要使用.extractFile将embeddedObject提取到文件系统中。然后,使用您在新文档上创建的RichTextItem (而不是create实体),您可以使用rti.embedObject来附加您提取的文件。(可能最好在成功迁移后删除临时解压缩文件),有关嵌入附件所需参数的示例,请参阅设计器帮助。
当将文件解压缩到文件系统时,您可以将其解压缩到JVM的临时目录中,文件系统上的文件需要具有与连接到新文档时希望它具有的相同的文件名。由于这个原因,您不能真正使用File.createTemporaryFile(),因为临时文件名中将包含随机字符。相反,您可以使用
System.getProperty("java.io.tmpdir")`以及在你的提取物中的使用。
在开始处理之前要检查的另一件事是当前notesSession的isConvertMIME设置,如果到源字段是mime,则session.isConvertMIME == true将在加载文档时将该字段转换为richText。我认为在xpage中,默认情况下它是假的,尽管我不认为它会影响到您,因为我认为您的源附件已经是richText,但是对于阅读该附件并使用mime源字段的人来说,注意这一点很重要。另外,如果您使用setConvertMIME来更改它,一定要将其更改回您完成处理时的状态。
https://stackoverflow.com/questions/24152606
复制相似问题