Главная Библиотека Шаблоны и примерыJava в Domino. Вывод в поток присоединённых файлов
Николай Норкин
г. Киров
nickanor@mail.ru
В предыдущем материале Java в Domino. Получение файловых элементов дизайна приложений Domino в виде потоковых данных описывалась работа с элементами дизайна приложений
Возможно, более востребованный пример получения файлов в виде потока данных (InputStream) - это получение присоединённого (attached) файла в документе Lotus Notes
Как и в случае с обработкой элемента дизайна, используется класс lotus.domino.NoteCollection
lotus.domino.NoteCollection notes = database.createNoteCollection(false);
notes.selectAllDesignElements(false);
notes.buildCollection();
notes.add(document);
lotus.domino.DxlExporter exporter = session.createDxlExporter();
exporter.setOutputDOCTYPE(false);
exporter.setConvertNotesBitmapsToGIF(true);
String dxl = exporter.exportDxl(notes);
Затем нужно получить xml-документ из строки dxl-описания и найти base64-содержимое файла
javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse( new java.io.ByteArrayInputStream(dxl.getBytes("UTF-8")));
Добраться до файла по имени filename
org.w3c.dom.NodeList nodes = null;
org.w3c.dom.Node node = null;
org.w3c.dom.Node source = null;
nodes = document.getElementsByTagName( "document");
try {
source = nodes.item(0);
}
catch (Exception ex) {}
String name = "";
try {
nodes = ((org.w3c.dom.Element) source).getElementsByTagName("item");
for (int i = 0; i < nodes.getLength(); i++) {
node = nodes.item(i);
try {
if (node.getAttributes().getNamedItem("name").getNodeValue().equalsIgnoreCase("$FILE")) {
ru.medkirov.mail.AttachedFile file = new ru.medkirov.mail.AttachedFile(node) ;
name = file.getName();
if (name.equals(filename)) {
return file.getResource();
}
}
}
catch (Exception ex) {}
}
}
catch (Exception ex) {}
Для обработки xml-описания аттаченного файла в настоящкм решении используется класс AttachedFile
Ниже приведены избранные места из кода этого класса. Полностью Jписание и код класса
package ru.medkirov.mail;
public class AttachedFile {
protected String name = "";
protected String resource = "";
protected String hosttype = "";
protected String compression = "";
protected String encoding = "";
protected String flags = "";
protected java.util.Date created = null;
protected java.util.Date modified = null;
public AttachedFile(org.w3c.dom.Element fileElement) {
this.init(fileElement);
}
public AttachedFile(org.w3c.dom.Node node) {
try {
this.init((org.w3c.dom.Element)node);
}
catch (Exception ex) {}
}
public void init(org.w3c.dom.Element fileElement) {
try {
org.w3c.dom.Node node = fileElement.getElementsByTagName("file").item(0);
try {
this.name = node.getAttributes().getNamedItem("name").getNodeValue();
}
catch (Exception ex) {}
org.w3c.dom.Node child;
try {
child = ((org.w3c.dom.Element) node).getElementsByTagName("filedata").item(0);
this.resource = child.getTextContent();
}
catch (Exception ex) {}
}
catch (Exception ex) {}
}
public String getName() {
return this.name;
}
public String getResource() {
return this.resource;
}
}
Ссылки
Java в Domino. Получение файловых элементов дизайна приложений Domino в виде потоковых данных
Java в Domino. Сохранение файлового потока в документе Notes
Java в Domino. Библиотека Memo
Код библиотеки Memo
Пример обработки файловых потоков. Работа с бланком Microsoft Excel
|
Опубликовано — 01/20/2021 |
| |
|
|