• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

mortikanis

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

Omh

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
бинарный стрим есть в java ...
но (и здесь тоже :) ) джава от ИБМ, не "всё делает" и "не везде" - он не работает корректно:


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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
ну вот и готовый код (приблизительно, как мной и описано выше):
 

NetWood

Lotus Team
17.04.2008
545
93
BIT
8
посредством agent?openagent
имхо через agent?openagent это не очень. мягко говоря.
вот по WQO открывать агент на форме и генерить в RTF поле чего желается - самое то.
пример с таблица тут
база здесь
 
M

mortikanis

lmike
Ну вообщем пытался делать по аналогии,без генерации чего либо как в этой статье

с самого начала от предыдущих действий у меня есть 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

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

KFire3

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
надо не забывать - в базе обязана быть дефолтная вьюшка!

я выводил как сам и описывал (в квадратных скобках):
Код:
				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
нельзя ибо принт выводит текст и никаких бинарников и майм типы (не текстовые) будут побоку
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!