在我看来,有两种方法可以在NotesDocument中存储附件。
作为RichTextField或“MIME部分”。
如果它们存储为RichText,您可以执行以下操作:
document.getAttachment(文件名)
这似乎不适用于存储为MIME部分的附件。见截图
我在后端有数千个这样的文档。这不是一个UI问题,我需要使用XPages的下载控件文件。
每个文件只有1个附件。一个图像。一个JPG文件。我有3个不同大小的数据库。原创,大型和小型。最初我从包含存储为RichText的附件的文档中创建了所有内容。但我的代码将它们保存为MIME部分。这就是它的作用。不是我的意图。
发生了什么事我丢失了一些“小”图片,所以我需要从现在存储为MIME部分的原始图片重建它们。因此,我的最终目标是将它从NotesDocument转换为Java缓冲图像。
我认为我有代码可以做我想要的但是我只是“简单地”无法弄清楚如何从文档中获取附件然后进入Java缓冲图像。
下面是我正在使用的一些粗略代码。我的目标是用原始图片传递文档。我已经拥有了fileName,因为我将其存储在metaData中。但我不知道如何从文件本身那里得到它。我正在传递“小”以创建小图像。
我想我只是不知道如何处理以这种方式存储的附件。
任何想法/建议将不胜感激!感谢!!!
public Document processImage(Document inputDoc, String fileName, String size) throws IOException {
// fileName is the name of the attachment on the document
// The goal is to return a NEW BLANK document with the image on it
// The Calling code can then deal with keys and meta data.
// size is "Original", "Large" or "Small"
System.out.println("Processing Image, Size = " + size);
//System.out.println("Filename = " + fileName);
boolean result = false;
Session session = Factory.getSession();
Database db = session.getCurrentDatabase();
session.setConvertMime(true);
BufferedImage img;
BufferedImage convertedImage = null; // the output image
EmbeddedObject image = null;
InputStream imageStream = null;
int currentSize = 0;
int newWidth = 0;
String currentName = "";
try {
// Get the Embedded Object
image = inputDoc.getAttachment(fileName);
System.out.println("Input Form : " + inputDoc.getItemValueString("form"));
if (null == image) {
System.out.println("ALERT - IMAGE IS NULL");
}
currentSize = image.getFileSize();
currentName = image.getName();
// Get a Stream of the Imahe
imageStream = image.getInputStream();
img = ImageIO.read(imageStream); // this is the buffered image we'll work with
imageStream.close();
Document newDoc = db.createDocument();
// Remember this is a BLANK document. The calling code needs to set the form
if ("original".equalsIgnoreCase(size)) {
this.attachImage(newDoc, img, fileName, "JPG");
return newDoc;
}
if ("Large".equalsIgnoreCase(size)) {
// Now we need to convert the LARGE image
// We're assuming FIXED HEIGHT of 600px
newWidth = this.getNewWidth(img.getHeight(), img.getWidth(), 600);
convertedImage = this.getScaledInstance(img, newWidth, 600, false);
this.attachImage(newDoc, img, fileName, "JPG");
return newDoc;
}
if ("Small".equalsIgnoreCase(size)) {
System.out.println("converting Small");
newWidth = this.getNewWidth(img.getHeight(), img.getWidth(), 240);
convertedImage = this.getScaledInstance(img, newWidth, 240, false);
this.attachImage(newDoc, img, fileName, "JPG");
System.out.println("End Converting Small");
return newDoc;
}
return newDoc;
} catch (Exception e) {
// HANDLE EXCEPTION HERE
// SAMLPLE WRITE TO LOG.NSF
System.out.println("****************");
System.out.println("EXCEPTION IN processImage()");
System.out.println("****************");
System.out.println("picName: " + fileName);
e.printStackTrace();
return null;
} finally {
if (null != imageStream) {
imageStream.close();
}
if (null != image) {
LibraryUtils.incinerate(image);
}
}
}
答案 0 :(得分:2)
我相信这将是以下代码段的一些变体。您可能必须更改哪个mimeentity具有内容,以便它可能在父级或另一个子级中。
Stream stream = session.createStream();
doc.getMIMEEntity().getFirstChildEntity().getContentAsBytes(stream);
ByteArrayInputStream bais = new ByteArrayInputStream(stream.read());
return ImageIO.read(bais);
编辑:
session.setConvertMime(false);
Stream stream = session.createStream();
Item itm = doc.getFirstItem("ParentEntity");
MIMEEntity me = itm.getMIMEEntity();
MIMEEntity childEntity = me.getFirstChildEntity();
childEntity.getContentAsBytes(stream);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
stream.getContents(bo);
byte[] mybytearray = bo.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(mybytearray);
return ImageIO.read(bais);
答案 1 :(得分:0)
David看看DominoDocument,http://public.dhe.ibm.com/software/dw/lotus/Domino-Designer/JavaDocs/XPagesExtAPI/8.5.2/com/ibm/xsp/model/domino/wrapped/DominoDocument.html
在那里你可以包装每个Notes文档 在DominoDocument中,有DominoDocument.AttachmentValueHolder,您可以在其中访问附件。 我在Engage解释了它。它非常强大 http://www.slideshare.net/flinden68/engage-use-notes-objects-in-memory-and-other-useful-java-tips-for-x-pages-development