gpt4 book ai didi

java - 如何访问存储为 MIME 部件的附件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:56 25 4
gpt4 key购买 nike

在我看来,有两种方法可以在 NotesDocument 中存储附件。

作为 RichTextField 或“MIME 部件”。

如果它们存储为 RichText,您可以执行以下操作:

文档.getAttachment(文件名)

这似乎不适用于存储为 MIME 部件的附件。看截图 enter image description here

我在后端有数千个这样的文档。这不是我需要使用 XPages 的文件下载控件的 UI 问题。

每份文件只有 1 个附件。一个图像。一个 JPG 文件。我有 3 个不同大小的数据库。原始的、大的和小的。最初,我从附件存储为 RichText 的文档创建了所有内容。但我的代码将它们保存为 MIME 部分。它就是这么做的。不是我的本意。

发生的事情是我丢失了一些“小”图片,因此我需要从现在存储为 MIME 部分的原始图片中重建它们。所以我的最终目标是将它从 NotesDocument 转换为 Java 缓冲图像。

我想我有代码可以做我想做的事,但我只是“简单地”想不出如何将附件从文档中取出然后放入 Java 缓冲图像中。

下面是我正在使用的一些粗略代码。我的目标是传入带有原始图片的文档。我已经有了文件名,因为我将它存储在元数据中。但我不知道如何从文档本身中获取它。我将传入“Small”以创建 Small 图像。

我想我只是不知道如何使用以这种方式存储的附件。

任何想法/建议将不胜感激!谢谢!!!

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);
}

}

最佳答案

我相信这将是以下代码片段的一些变体。您可能必须更改哪个 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);

关于java - 如何访问存储为 MIME 部件的附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com