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

Тема в разделе "Lotus - Программирование", создана пользователем mortikanis, 2 дек 2009.

  1. mortikanis

    mortikanis Гость

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Можка принтануть соответсвующий content type и потом данные?
    Хотя конечно вряд ли...
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    бинарный стрим есть в java ...
    но (и здесь тоже :) ) джава от ИБМ, не "всё делает" и "не везде" - он не работает корректно:
    http://lekkimworld.com/2005/11/12/creating...for_domino.html

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
  5. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    имхо через agent?openagent это не очень. мягко говоря.
    вот по WQO открывать агент на форме и генерить в RTF поле чего желается - самое то.
    пример с таблица тут http://codestore.net/apps/htmlareas.nsf/calendar
    база здесь http://codestore.net/store.nsf/unid/DOMT-7...file/butter.zip
     
  6. mortikanis

    mortikanis Гость

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

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

    Код (Text):
                //Ну собственно создаю бинарный стрим и записываю туда мой 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.
    Иные предыдущие действия(вывод изображения в диалоговом окне), браузер выполняет.
     
  7. mortikanis

    mortikanis Гость

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

    KFire3 Гость

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    надо не забывать - в базе обязана быть дефолтная вьюшка!

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

Поделиться этой страницей