Может кто поделится готовым кодом Upload для веба?

Gandliar

Well-Known Member
Lotus team
16.02.2004
329
6
#1
Привет!

Может кто поделится готовым кодом реализации загрузки файлов на сервер?

Что есть:

Есть веб страничка, на ней есть кнопка добавить файл. Нажимаем на кнопку, открывается всплывающее окно, там есть upload control, в него выбираем файл, жмем сохранить, по сохранению вызывается агент, который вызывает функцию, закрывающую окно и передающую unid файла в поле вебстранички (для последующей разборки) и данные для отображения что файл загружен.

В чем проблема: пользователи открывают много окон, аттачат файлы, окно всплывающее открывается одно и то же, глючит вообщем.

Чего хотелось бы:

На страничке видим сразу upload control или кнопку добавить файл, при нажатии открывается окно выбора файлов, если файл выбран, ajax-запросом сохраняем файл в лотусе, по сохранению отображаем файл на вебстраничке

Или какой то лучший вариант. заранее благодарю.

Основная страничка не должна перегружатся
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
329
6
#4
В итоге получается что файлы отправляются через генерацию скрытых iframe.
Код потиху доделываю, неужели никто этим не занимался для домины?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#5
На сколько мне помнится веб для домины, то:
- нельзя без post формы с upload загрузить вложение;
- нельзя передать в upload путь к файлу, т.е. пользователь непосредственно должен управлять этим элементом, чтобы загрузить файл;
Соответственно, нельзя генерить скрытые окна для загрузки файлов, нельзя загрузить файл без перезагрузки окна формы загрузки (хотя, если основная страничка имелась в виду другая, то это замечание опускаем).

Вот по открытию нового окна без перегрузки открытого можно подумать, не свойство target ли управляет этим процесом?

Если надо дать пользователю возможность загрузить сразу несколько файлов с одной формы, лучше сделать несколько upload на одной форме, но скрывать все кроме одного неуказанного.
Сделать это, в общем, не сложно, если иметь навыки работы с JS, эдинственный недостаток, который помнится, это заранее ограниченное кол-во upload - их необходимо разместить на нотес-форме, генерить динамически не получится, иначе при post формы сервер их не примет. Сервер принимает лишь те поля формы, которые есть на форме "в дизайнере".
А чтобы пользователь не мог открыть еще одно такое же окно для загрузки файлов, то следует мониторить такие открытые окна, давать открыть только одно. Можешь поискать реализацию модальных окон на JS.

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#9
По генерации что-то увидел, хотя не разбираюсь в х-страницах, а вот по поводу управления тем, что будет закачано не увидел.
На сколько я понимаю, то управление тем, что будет закачано ограничено в связи с безопасностью - закачивается лишь то, что указал пользователь самостоятельно.
Ну да это лирика, в общем :)
 

valmont

Well-Known Member
27.12.2004
64
0
#10
да конечно всё делали и всё прекрасно работает, и с перезагрузкой страницы и с ajax...
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#11
valmont
))) ты уж извини, но как снег летом с неба.
Кто делал, что делал, где делал, как делал, как работает? :)
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
329
6
#12
Подведу итог, чем закончилось мое копание:

Сделал псевдо модальное окно на основе div (с затемнением экрана), в котором на javascript создается форма (при первом вызове), в нее передается урл, по которому создается документ с файлом, и имя поля в uploadControl. В окне пользователь присоединяет файл и нажимает отправить. При отправке создается случайный iframe, который назначается в target формы и определяется функция при onload этого фрейма в которой сидит обработчик действий после загрузки файла. А сервер по итогу загрузки файла возвращает необходимые данные которые используются обработчиком. Сча тестирую.
 
M

mmm

Гость
#13
День добрый, Gandliar!
Выпало мне решать точно такуюже задачу с upload. Решил ее с помощью создания нового окна и формы, и после загрузки файла, агент на QuerySave закрывает окно и передает файл в основной документ и удаляет временную форму. Все работает, но возникла такая же проблема с нерадимыми пользователями, которые открывают несколько окон или отправляют файл в уже закрытый документ. Еще имеется похожее диалоговое окно со списком пользователей которое также открывается в отдельном окне с формой и имеет такие же проблемы с пользователями.
Очень хочется создать форму в форме с затемнением, что бы приоткрытие второй они на это время ничего немогли сделать с исходной.
Мож поподробнее расказать как получилось это сделать это с помощью iframe или скинуть пример на почту utkit@ya.ru . С программированием домино под веб я только начинаю работать и поэтому никак не получается красиво решить данную задачку.
Спасибо!
 

Gandliar

Well-Known Member
Lotus team
16.02.2004
329
6
#14
День добрый, Gandliar!
Выпало мне решать точно такуюже задачу с upload. Решил ее с помощью создания нового окна и формы, и после загрузки файла, агент на QuerySave закрывает окно и передает файл в основной документ и удаляет временную форму. Все работает, но возникла такая же проблема с нерадимыми пользователями, которые открывают несколько окон или отправляют файл в уже закрытый документ. Еще имеется похожее диалоговое окно со списком пользователей которое также открывается в отдельном окне с формой и имеет такие же проблемы с пользователями.
Очень хочется создать форму в форме с затемнением, что бы приоткрытие второй они на это время ничего немогли сделать с исходной.
Мож поподробнее расказать как получилось это сделать это с помощью iframe или скинуть пример на почту utkit@ya.ru . С программированием домино под веб я только начинаю работать и поэтому никак не получается красиво решить данную задачку.
Спасибо!
Итоговое решение удобно и просто сделать с помощью dojo
dojo входит в стандартную поставку домино сервера с 8.5 помоему. Единственно что уточнить надо какое дожо стоит на конкретной версии вашего сервера, чтобы подключать правильный каталог.

Ссылка на почитать на диджит диалог с примерами

http://dojotoolkit.org/reference-guide/1.7...ml#dijit-dialog

еще одна ссылка

http://oooportal.ru/?cat=article&id=1833

Подход такой

Делаете форму для аплоада файлов, вызываете ее в диджит диалоге, сохраняете, возвращает унид документа с файлом, обрбрабатываете
 
M

mmm

Гость
#15
Спасибо, буду пробовать разбираться свиджетами. Нормально ли они работают в браузерах на планшетах и смартфонах?

Получилось ли сделать решение без виджетов с помощью DIV или iframe? Мне надо сделать универсальное решение диалогового окна с затемнением не только для загрузки файлов, а еще для выбора из списка пользователей или организаций (и работой на планшетах). Сейчас это так же работает с помощью отдельного окна, из-за чего возникают проблемы у пользователей. Хотелось бы данную функциональность так же перенести в создание формы в форме с затемнением окна.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 484
360
#16
использование фрэймворков (коим и является dojo) является "стандартом", а вто всякие "iframe" могут привести к глюкам и необходимости костылей...
dojo - потому как идёт в составе домины
фрэймворки позволяют абстрагироваться от устройств, браузера и т.п. шняги