Личная страница пользователя...

Тема в разделе "Lotus - Xpages", создана пользователем JohnLemon, 22 апр 2015.

  1. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Здравствуйте, можете подсказать как реализовать личную страницу пользователя с фоткой, то есть что бы у каждого юзера была своя фотка и сссылка на фотку желательно сохранялась в документе тоже? Сейчас загружаю через компонент file Download, в документ пользователя, который создается с привязкой через notes name, в данном варианте не понимаю как получить ссылку на док и записать ее в тоже в поле для дальнейшего использования. Подскажите как лучше это все реализовать или ссылочкой помогите плз ) ?
     
  2. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Круто! :)
    А чем RT поле, в хепаге, показывающей "документ пользователя", не устраивает?
    Если там ничо нет - драг-енд-дропишь туда, из проводника Win например, фотку и сохраняешь док в базе.
    Можешь играть двумя полями: одно, computed - для показа, другое - для редактирования.
    Ну и, одно скрываешь, другое показываешь. Или редактируешь (драг-енд-дропишь) в модальном окошке с RTE.
    А док юзверя можешь взять из вида с доками пользователя по ключу name (по первой сорт. колонке).
     
    2 пользователям это понравилось.
  3. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Блин RT поле не пробовал, но мне кажется это как то не почеловечески ). А есть ссылка как это сделать? как скрыть кнопки у рт поля? Просто потом может понадобиться что то в роде аватарки, и т.д. Да и я боюсь рт, данные не потерять бы, пока не очень понимаю как они работают ).
     
  4. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Код (Text):
    <xp:inputRichText id="inputRichText1">
    <xp:this.dojoAttributes>
    <xp:dojoAttribute name="toolbar">
    <xp:this.value><![CDATA[#{javascript:var customToolbar="[]";
    return customToolbar;}]]></xp:this.value>
    </xp:dojoAttribute>
    </xp:this.dojoAttributes></xp:inputRichText>
     
  5. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Никаких RT-полей.
    Фотки только отдельным файлом и ссылкой.

    Достучаться до фотки можно через вид.
    Первая сортированная колонка (ключ) lotus-имя.. желательно короткое, но уникальное.
    А в url-картинки ссылка в формате "/<вид>/<ключ>/$File/<имя файла>"
    Это вариант хорошо сработает, если файлы будут закачиваться с одним именем.
    Если имена файлов будут оставляться оригинальные - то придется лукапить
     
    #5 NickProstoNick, 27 апр 2015
    Последнее редактирование модератором: 27 апр 2015
    4 пользователям это понравилось.
  6. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    562
    Симпатии:
    214
    Почему?
     
  7. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    потому что RT-полю свойственно ломаться, если поле сохраняется в WEB и в толстом клиенте.
    Ну и по хорошему - а зачем хранить фото в RT-поле?
    Говорю из личного опыта - со временем понадобится хранить несколько копий фотографии разных размеров.
    И как быть в этом случае?
     
  8. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Вот и мне не нравиться, но не могу понять где хранить, как сохранять и как получить ссылку на фотку. Хтелось бы хранить просто в какой нибудь папке. Просто бредово как то, а если нужна будет галерея, делать тупо кучу доков ?
    Подскажи плз как их избежать ? Если можно ссылочкой на пример)
     
  9. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Ссылки на пример нет. Самый простой вариант - обычные атачи, но не эмбэдэд! Тут по сути будет RT-поле, но его можно будет удалить. Только аккуратно, потому как при удалении RT-поля удалятся и атачи. А дальше светишь фотку тегом img. Ссылку я тебе описывал выше.
    Если надо грузить пачку-фоток и сохранять в директорию - тут все немного сложней. Тут надо писать отдельную страницу-загрузчик.
    Надо ловить событие на сервере и детачить файлы в нужную тебе директорию.
    Конечно можно и не ловить событие, запускать агент после загрузки фоток. Тут уж сам решай.
    Еще одна проблема - загрузка пачки файлов. IE не позволяет выделять пачку файлов. Тут надо отдельный модуль на флеше. В инете есть уже готовые решения, но мне они не подошли. Я переписал по своему.
     
    2 пользователям это понравилось.
  10. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Уточнение - IE9 и ниже.
     
  11. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Если в компании найдется хоть один, с таким софтом - все остальное не важно )))
    Но в общем согласен
     
  12. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Я так понимаю сохранения в РТ поле все равно неизбежно ?
     
  13. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    имхо в xpage перемудрили с еммбед картинками и аттачами...
    http://www.wissel.net/blog/d6plinks/SHWL-86QKNM
     
    2 пользователям это понравилось.
  14. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Это не эммбед, а аттачи.
    И это не новшество xPages.
    И кроме того, файлы в базе - зло! Объем и тормоза!
    А пользователю не всегда расскажешь, что нельзя большие фотки слать.
    У нас, к примеру, есть любители слать фотку по 12-16МБ. А если умножить это на 2500-3000 пользователей, которые пришлют хотя бы по одной фотографии... что с базой станет?
    Нет, ну конечно можно включить DAOS, но тут возникают свои нюансы с бекапированием и восстановлением
     
  15. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    @NickProstoNick, при всем уважении - реч идет о том, что в xPages перемудрили с URL аттачей и так же внедренных картинок. Из за этого те же внедренные картинки и бьются и режутся в обычном клиенте, а аттачи вылетают из РТ поля. Во всяком случае у меня - при работе с штатным едитором.
    Если исключить вмешательство LN клиента - то все работает вполне корректно. В том числе несколько (2-3) РТ полей для картинок аватара разных размеров.
    Имхо тема для отдельной ветки :)
     
  16. JohnLemon

    JohnLemon Well-Known Member

    Регистрация:
    20 авг 2014
    Сообщения:
    274
    Симпатии:
    5
    Дак все таки может кто нибудь подсказать как сохранить картинку что бы она не никуда потом не пропала на ssjs ??
     
  17. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    тут даже не о чем говорить. Говорю из личного опыта.
    Для своих нужд разрабатывали фото-видео -галерею. Объем загруженных файлов превышает 64ГБ.
    Ни для кого не секрет, что базы Lotus ОЧЕНЬ плохо работают при объемах близких к 64Гб. Ну и опять же... полезная нагрузка базы. Давай сравним две базы... 64Гб с фотками и 64Гб текстовых данных (с теми же путями к фотографиям ).
    Кроме того - большие объемы файлов сильно сказываются на скорости загрузки и обработки страницы. С этой целью делаются превью фотографий меньшего размера, а это еще +к общему объему.

    Но опять же все упирается в поставленную задачу.
    Если просто фотография в телефонный справочник - то храни все в базе.
     
    2 пользователям это понравилось.
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Я пользуюсь SWFUpload. В интернете много информации по этому поводу.
    Я сохраняю файл по событию beforeRenderResponse.
    Код (Javascript):
    var con = facesContext.getExternalContext();
    var response = con.getResponse();
    var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest();
    var map:java.util.Map = request.getParameterMap();
    var fileDataName = "Filedata"; //name of the POST request parameter that contains the file
    var fileData:com.ibm.xsp.http.UploadedFile = map.get( fileDataName );
    var tempFile:java.io.File = fileData.getServerFile();
    var correctedFile = new java.io.File( tempFile.getParentFile().getAbsolutePath() + java.io.File.separator + fileData.getClientFileName() );
    var success = tempFile.renameTo(correctedFile); //rtFiles is a rich text item on a notesdocument of your chosing
     
    // сохраняю файл в новый документ.
    var docParent: NotesDocument = database.getDocumentByUNID( param['id'] )
    var doc: NotesDocument = database.createDocument()
    var rtFiles: NotesRichTextItem = doc.createRichTextItem( "body" )
    doc.replaceItemValue( "Form", "Post" )
    doc.replaceItemValue( "Type", "photo" )
    doc.replaceItemValue( "FileName", correctedFile.getName() )
    doc.replaceItemValue( "Description", correctedFile.getName() )
    doc.replaceItemValue( "onProcess", "1" )
    rtFiles.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT, "", correctedFile.getAbsolutePath(), null);
    doc.makeResponse( docParent )
    doc.computeWithForm( false, false )
    doc.save( true, false, true )
     
    correctedFile.renameTo(tempFile);
     
    //response.setStatus(200);
    var writer = response.getWriter();
    response.setContentType("text/xml");
    response.setHeader("Cache-Control", "no-cache");
    writer.write( doc.getUniversalID() );
     
    facesContext.responseComplete();
    //return
    Но тут можно написать копирование фала сразу в нужную директорию.
    Если на сервере Windows - думаю можно попробовать ActiveXObject.
    Но я бы стал копать в сторону Managed Beans.
     
    #18 NickProstoNick, 28 апр 2015
    Последнее редактирование модератором: 28 апр 2015
    2 пользователям это понравилось.
  19. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    можно попробовать этот урок
    Один нюанс сохранения файлов на диск - директория с файлами должна располагаться в WEB-директории сервере Lotus! иначе по hhtp файлы грузиться не будут.
    Чтоб снизить нагрузку на http - у меня развернут ftp-сервер и все файлы грузятся по ftp. В таком случае директория должна находиться на ftp
     
    #19 NickProstoNick, 28 апр 2015
    Последнее редактирование модератором: 28 апр 2015
  20. rinsk

    rinsk Lotus team
    Lotus team

    Регистрация:
    12 ноя 2009
    Сообщения:
    795
    Симпатии:
    78
    Если не использовать DAOS - то это точно в базах домино хранить не стоит. И даже с DAOS - есть ограничение на саму базу daoscat.nsf.
    Это известное ограничение архитектуры - кто то с этим спорит ?:)))

    В общем то об этом и идет разговор - у чел явно не мильон аватаров))) И в данном контексте было уточнение - почему "бьются" РТ поля. И в каждом конкретном случае есть разные варианты решения задачи - где то внедренные картинки - где то аттачи. А где то и на DICOM сервере ;)
     
Загрузка...

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