Вывод изображение в Stream в браузер с помощью агента

  • Автор темы mortikanis
  • Дата начала
M

mortikanis

#1
Господа, есть вопрос.
Существует агент, в котором генерируется поток с изображением. Каким образом осуществить, дабы при вызове этого агента из браузера посредством agent?openagent, этот агент возвращал в браузер это изображение?
Спасибо)
 

Omh

Lotus team
04.07.2007
2 210
1
#2
Можка принтануть соответсвующий content type и потом данные?
Хотя конечно вряд ли...
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#3
бинарный стрим есть в java ...
но (и здесь тоже :) ) джава от ИБМ, не "всё делает" и "не везде" - он не работает корректно:
http://lekkimworld.com/2005/11/12/creating...for_domino.html

потому есть способ - формировать док, в него класть файл, а в браузер возвращать url этого файла (в доке)
хотя - не во всех случаях это подойдет
возврат урла (на всяк) - в брекетах []
 

NetWood

Lotus team
17.04.2008
372
19
#5
имхо через agent?openagent это не очень. мягко говоря.
вот по WQO открывать агент на форме и генерить в RTF поле чего желается - самое то.
пример с таблица тут http://codestore.net/apps/htmlareas.nsf/calendar
база здесь http://codestore.net/store.nsf/unid/DOMT-7...file/butter.zip
 
M

mortikanis

#6
lmike
Ну вообщем пытался делать по аналогии,без генерации чего либо как в этой статье http://www.codestore.net/store.nsf/rsrc/bl...le/captcha.java

с самого начала от предыдущих действий у меня есть outputstream под названием stream1, которое выводилось в диалоговое окно. Теперь хочу вывести в браузер

Код:
			//Ну собственно создаю бинарный стрим и записываю туда мой outputstream. Ну а далее создается Notes Stream, в который пишется бинарный. Как в примере. Чехарда
ByteArrayOutputStream os = new ByteArrayOutputStream();
os.writeTo(stream1);
Stream stream=session.createStream();
stream.write( os.toByteArray() );

// далее мы создаём временный документ для хранения изображения
Document tmp = db.createDocument();
tmp.replaceItemValue("Form", "Captcha");

// далее как я понял создается уникальное имя для джепеговского файла, что допустим на данный момент не обязательно и опустим и это

/*	String id = doc.getItemValueString("Query_String").replaceAll("openagent&", "");
String filename = id+".jpg";

tmp.replaceItemValue("ID", id);
tmp.replaceItemValue("Answer",session.hashPassword(finalString.toString())); */
String filename = "test.jpg"

// Идет присоединение файла к документу

MIMEEntity Body = tmp.createMIMEEntity();

MIMEHeader header = Body.createHeader("content-disposition");
header.setHeaderVal("attachment;filename=\""+filename+"\"");

Body.setContentFromBytes(stream, "image/jpeg", MIMEEntity.ENC_IDENTITY_BINARY);
tmp.save();

// и собственно вывод этого файла. 

pw.println("Location: /"+db.getFilePath().replaceAll("\\\\", "/")+"/0/"+tmp.getUniversalID() + "/$file/"+filename);
Однако же, в браузере мне пишет исключительно Agent done.
Иные предыдущие действия(вывод изображения в диалоговом окне), браузер выполняет.
 
M

mortikanis

#7
Похимичил, стал писать, что невозможно найти страницу.
Хм, а в таком же случае файл этот находиться не там будет. Если без всей этой случайной генерации. Но где? Как правильно адрес к нему прописать?
 
K

KFire3

#8
Хмм, а разве нельзя написать в агенте Print var, где var - это String с бинарными данными?
Естественно сначала content type вывести.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#9
надо не забывать - в базе обязана быть дефолтная вьюшка!

я выводил как сам и описывал (в квадратных скобках):
Код:
				Vector v = body.getEmbeddedObjects();
Enumeration e = v.elements();
if (e.hasMoreElements()){
String docHttp=docUpdate.getHttpURL();
if (docHttp.equals("")){pw.println("http URL is not defined, notes URL>"+docUpdate.getNotesURL()); return 0;}
System.out.println(docHttp);
int i=docHttp.indexOf("?");
int pos= i == (-1) ? docHttp.indexOf("!"): i;
String address="["+docHttp.substring(0,pos)+"/$FILE/"+((EmbeddedObject)e.nextElement()).getName()+"]";
//					address= docHttp.substring(pos);
pw.println(address);
return 0;
}
в случае выше - енумерация не нужна, имя файла и так есть
а в получение пути ка базе - нет необходимости (используйте .getHttpURL() для дока)

Добавлено: KFire3
нельзя ибо принт выводит текст и никаких бинарников и майм типы (не текстовые) будут побоку