powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Передача файлов на сервер с помощью гиперметода - is it possible?
51 сообщений из 51, показаны все 3 страниц
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38034922
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые коллеги,
У меня технический вопрос, на который, вероятно, кто-нибудь знает ответ. Скажите пожалуйста, можно ли с помощью гиперметода передать на сервер файл, выбранный пользователем в элементе <input type="file">? Т.е. тут проблема такая - что нужно вытащить из этого input и передать в качестве аргумента гиперметода и какой должен быть тип этого аргумента? И как принять на сервере имя файла и сам поток данных? Как принять из input'а файл на сервере по обычному submit'у формы я знаю и много раз успешно это делал, и в этом форуме эта техника неоднократно обсуждалась, а вот - гиперметод? И если не гиперметод - то, обобщая задачу, как передать на сервер файл без перезагрузки страницы, т.е. не submit'ом формы?
Ссылки на известные opensource-загрузчики у меня есть, я многие из них посмотрел в деле, но мне не хотелось бы встраивать их в свою довольно сложную верстку.
Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38034950
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот увидел сравнительно недавний пост от YMKA2007 (мне кажется, я знаю этого человека, хотя до конца не уверен). Обратил внимание на следующую его фразу:
"в примерах практически все через PHP реализовано, более менее понятно что там происходит
но как такую серверную часть организовать для нашего любимого Cache ? (видать мозги мои совсем перестали работать)"

Но ответа в переписке по этому посту так и не нашел. Неужели никто еще этого не делал?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38034986
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решение на Cache не будет отличаться от PHP
ищем любой готовый загрузчик файлов на jQuery или без него
чаще всего это готовые наборы только части со стороны браузера
там должно быть в настройках компоненты что-то типа на какой URL отправить файл и с какими дополнительными параметрами
ну а вот в качестве этого URL указываем нашу страничку на Cache, и там ловим файл и сохраняем у себя, куда сохранить правильно помогут дополнительные параметры.

на самом деле все это теория, не было пока необходимости задействовать чужие компоненты, у нас используется все свое для этого.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035032
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
да, конечно, у вас всё своё. У вас очень мощная компонента MultipleFile на java-апплете с богатым функционалом. Ох, сколько же труда было в нее вложено! Моего в том числе.
Насчет гиперметода я, наверное, несколько размечтался. Вот, нашел очень полезную ссылку:
http://webguruz.ru/web-developer/ajax-upload-files/
Наверное, так и сделаю.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035037
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyDAiMor,
да, конечно, у вас всё своё. У вас очень мощная компонента MultipleFile на java-апплете с богатым функционалом. Ох, сколько же труда было в нее вложено! Моего в том числе.
Насчет гиперметода я, наверное, несколько размечтался. Вот, нашел очень полезную ссылку:
http://webguruz.ru/web-developer/ajax-upload-files/
Наверное, так и сделаю.
Java-апплет, к счастью не используется, он там нафиг не нужен, от него был нужен один функционал это сканирование
а все остальное можно реализовать и на чистом JS
этот гребанный MultipleFile, руки бы поотрывать кто его таким придумал, ну это так просто мысли вслух
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035062
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
М-да. Бросаться сами понимаете чем в своих предшественников, на плечах которых стоИте, - не признак хорошего тона.
Ну да ладно. Во-первых - не будем выходить за рамки темы поста, во-вторых, мне это уже давно, сами понимаете, совершенно безразлично. Включая MultipleFile.
Что касается темы. Тут вот ведь какой вопрос. Как принять файл из элемента <input type="file"> на стороне Cache всем хорошо известно. Но ведь в этих jQuery-загрузчиках - там ведь не input со своим именем и не форма, там, как Вы справедливо написали, всё по-другому настраивается. Так вот, каков в связи с этим должен быть код приема файла в Cache? Ведь наверное уже не таким, как из input? Имеет кто-нибудь success story на эту тему? "Так же как в PHP" - это не ответ, его нельзя применить на практике, если у нас не PHP, а Cache.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035095
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyDAiMor,
М-да. Бросаться сами понимаете чем в своих предшественников, на плечах которых стоИте, - не признак хорошего тона.
Ну да ладно. Во-первых - не будем выходить за рамки темы поста, во-вторых, мне это уже давно, сами понимаете, совершенно безразлично. Включая MultipleFile.

как бы то ни было, но мне с этим работать и я знаю о чем говорю.
EvLaUyЧто касается темы. Тут вот ведь какой вопрос. Как принять файл из элемента <input type="file"> на стороне Cache всем хорошо известно. Но ведь в этих jQuery-загрузчиках - там ведь не input со своим именем и не форма, там, как Вы справедливо написали, всё по-другому настраивается. Так вот, каков в связи с этим должен быть код приема файла в Cache? Ведь наверное уже не таким, как из input? Имеет кто-нибудь success story на эту тему? "Так же как в PHP" - это не ответ, его нельзя применить на практике, если у нас не PHP, а Cache.

Вы у нас человек опытный, не будем вдаваться в подробные примеры, и странно что вы сами не смогли понять как это реализовать
объясним на пальцах: есть переменная %request, которая содержит в себе всю информацию по запросу, так вот не зависимо от того как там смог отправить jQuery, вы всегда можете посмотреть как там получил его Cache, посмотрев подробно Dump для %request
в одном из свойств этого объекта вы и найдете нужный вам файл, либо кусок файла если компонент по загрузке может качать его частями на сервер

выдрал кусок нашего кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	i %request.IsDefinedMimeData(FieldName,1) {
		//Название файла
		s:Value="" Value=%request.MimeData(FieldName,1).FileName 
		//Тип файла
		s ContentType=%request.MimeData(FieldName,1).ContentType
		s Content=%request.MimeData(FieldName,1)
	} else {
		//Название файла
		
		//Тип файла
		s ContentType=%request.ContentType
		s Content=%request.Content
	}
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035133
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
спасибо за ответ. Я нигде в этом форуме не позиционировал себя как "опытного человека", так что Ваша ирония не вполне уместна.
И потом - с каких пор на этом форуме принято отвечать типа " а вы могли бы и сами ..."? Что-то не припоминаю. Вас ведь все-таки как никак номинируют на СacheMan или как там это называется.
Фрагмент кода, который Вы привели, мне, разумеется, хорошо известен. Обратите внимание. В этом фрагменте используется переменная fieldName. Так вот, я еще раз повторю - для input с этим все ясно, там есть атрибут name, и я знаю на стороне сервера чему он равен, а для jQuery-аплоадера такого атрибута нет, потому что там нет формы как таковой. Вы правы, можно, перебрав на стороне сервера, все названия полей пришедшего объекта %request, понять, как же приходит этот файл или файлы, и я, разумеется, могу это проделать, задача решаемая. Меня интересовало, делал ли такое УЖЕ кто-нибудь из участников форума, кто мог бы поделиться успешным опытом и сэкономить время. Тот же вопрос, как я понимаю, интересовал и Ymka2007. Нет так нет. Еще раз благодарю за отклик.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38035162
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Часто у нас здесь фигурирует форма помощи(и не только от меня): а покажите что вы сделали вообще и мы покажем где у вас не так.

в частности в моем небольшом известном вам куске кода, есть условие по условию передачи через форму либо нет, когда указано поле либо нет.

PS. на счет позиционирования, еще как позиционировали, из того что быстро нашел тут
ну и в любом случае у меня у самого опыта работы с Cache всего то лет 5, что возможно меньше вашего
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036185
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EvLaUy,

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

как то так ))
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036190
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зато удалось прикруть imageArreaSelect
и получил возможность вырезать куски из фото определенных заданных размеров в разумных пределах
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036213
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007,
спасибо за доброжелательный отклик. Ну вот, я так и подозревал, что не так-то просто всё окажется. Рассуждения - это одно, а наличие или отсутствие реальной success story - совсем другое.
Я сейчас прикручиваю решение, ссылку на которое дал выше в этом же посте. Пока в процессе. Если это действительно работает - меня вполне устроит.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036300
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EvLaUy,

удачи, надуюсь все получится
и решением поделитесь!?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036565
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наваял пример работы с Ajax загрузкой файлов на сервер с использованием сторонних компонент
в качестве компоненты для загрузки файлов используется FineUploader
так же добавил Bootstrap, как и они в своих примерах

в архиве статика и кашевая часть в test.FileUpload.CLS.xml
я тестил на Ensemble 2010

проверял в GoogleChrome, IE9 и iPad с iOS 6
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036581
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
здорово! С удовольствием посмотрю. Вы знаете, а я ведь тоже смотрел и тестировал именно fineuploader и задавая свой вопрос, именно эту компоненту и имел в виду. Теперь даже и неловко, что, получается, отнял у Вас время, которого, с учетом нагрузок в компании Летограф, и так всегда не хватает. Если это действительно success story, все свои критические выпады беру обратно и присоединяю свой голос в поддержку Вашей кандидатуры на звание CacheMan.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036587
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUy,

там правда в примере нету сохранения самого файла на сервере куда надо, но поток с файлом получен, и остается за малым его сохранить
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036592
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
ну если поток получен, то остальное - не вопрос. Что ж, мы его уже на диск в виде файла не сохраним? Плавали - знаем.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036709
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

БРАВО )))
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38036935
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, а как вообще делается загрузка файлов? Общая схема?
Понятно, что с помощью input type=file, но ведь далеко не всегда же?
флеш, ява?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037004
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Кстати, а как вообще делается загрузка файлов? Общая схема?
Понятно, что с помощью input type=file, но ведь далеко не всегда же?
флеш, ява?
в большинстве случаев, для современных браузеров ограничивается JS, для проблемных браузеров, может применятся Flash, Java в совсем запущенных случаях
мой пример работает на iPad где нет ни Java ни Flash, не вдавался в технологию работы стороннего компонента, ну думаю это как то можно все получить на уровне DOM и js, ну а дальше обычный Ajax, но в любом случае все это через стандартный <input type='file'/>
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037011
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На уровне dom и JS можно получить объекты браузера. А как получить файл?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037041
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.На уровне dom и JS можно получить объекты браузера. А как получить файл?
мельком глянул код FineUploader, похоже что там все сводится к тому что там все работает по самому простому варианту
создается iframe в нем форма, и туда копируется наше поле с файлом, и эта форма POSTом сабмитится на сервер

но в HTML5 есть уже FileAPI , что позволяет работать с файлами в самом браузере не задействуя сервер, вплоть то модификации изображений, да и всего чего угодно, если сможешь на JS реализовать работу с бинарным файлом.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037558
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,

я так понял проблему с iPad удалось разрешить? на какой версии iOS ?
залить на сервак удалось только картинку? или другие файлы так же прокатят?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037583
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Хм. Я пробовал изменять значение input type=file и сабмитить, но это не работает.
Про то, что можно создать уже заполненную страницу и сабмитить ее, я даже не подумал.

А выбор нескольких файлов делается как, в общих словах?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037585
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007DAiMor,

я так понял проблему с iPad удалось разрешить? на какой версии iOS ?
залить на сервак удалось только картинку? или другие файлы так же прокатят?

iOS только 6 версии, при нажатии предлагал сфотографировать или выбрать из имеющихся фотографий
вроде как можно поставить тип разрешенных файлов, но я не пробовал, не стал заморачиваться с закидыванием на него других файлов.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037633
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.DAiMor,

Хм. Я пробовал изменять значение input type=file и сабмитить, но это не работает.
Про то, что можно создать уже заполненную страницу и сабмитить ее, я даже не подумал.

А выбор нескольких файлов делается как, в общих словах?

атрибут multiple для input
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037702
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,
программно заполнить именем файла элемент input нельзя - такая возможность исключена во всех браузерах по соображениям безопасности. В самом деле, в этом случае браузер мог бы сам, втайне от пользователя, создавать инпуты, тянуть с компа какие-то файлы и отправлять их на сервер. Поэтому выбрать файл можно только вручную, через файловый диалог. Если, конечно, Вы именно это имели в виду. Атрибут multiple работает во всех броузерах, кроме IE, во всяком случае, в 8 версии точно не поддерживается, в 9 - не пробовал.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037715
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyБлок А.Н.,
программно заполнить именем файла элемент input нельзя - такая возможность исключена во всех браузерах по соображениям безопасности. В самом деле, в этом случае браузер мог бы сам, втайне от пользователя, создавать инпуты, тянуть с компа какие-то файлы и отправлять их на сервер. Поэтому выбрать файл можно только вручную, через файловый диалог. Если, конечно, Вы именно это имели в виду. Атрибут multiple работает во всех броузерах, кроме IE, во всяком случае, в 8 версии точно не поддерживается, в 9 - не пробовал.
под программным заполнением я имел ввиду, копирование dom, т.е. получаем объект поля через getElementById, и копируем его в форму через appendChild
по приведенной мной ссылке про multiple, начиная с IE10, и все остальные большие браузеры, на мобильных тоже не доступен
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037728
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методика, описанная в ссылке, которую я дал в этом же посте выше, работает. Во всяком случае, у меня получилось. Есть только нюанс в серверном приеме файла в Cache. Ранее (в Cache2009) без проблем работала следующая конструкция:
file.Write(obj.Read(obj.Size)), где file - экземпляр класса %Library.File, obj - поток, в которой считан файл из %request. А в Cache2012 - не работает! Файл на диск записывается с искажениями, размер не соответствует оригиналу. Помогло использование %Stream.FileBinary согласно образцу, подсказанному servit'ом, в посте, заведенном в январе этого года krvsa.
http://www.sql.ru/forum/actualthread.aspx?tid=908620&hl=
krvsa этот вариант понравился (еще бы!), мне тоже. Всем нравится то, что работает.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037745
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
искажения возможны если где то используется CharacterStream, из-за чего он может его конвертировать на лету, для бинарных файлов конечно такое опасно

конструкцию вида
Код: plaintext
file.Write(obj.Read(obj.Size))
никогда и ни при каких обстоятельствах использовать нельзя
это потенциально приведет к ошибке
для копирования стримов, есть метод CopyFrom
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037765
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
наверное, нельзя. Только где, в каком авторитетном источнике по Cache это можно прочитать? В документации? Эх-хе-хе, нету там ничего.
В книжках? Раз-два и обчелся, да и там такого тоже нет.
И опять-таки - а почему нельзя? Я уже написал, что в Cache2009 это работало совершенно безукоризненно, я не помню проблем.
Откуда бедному cache-программисту черпать знания? В этом плане наш форум, конечно, бесценная вещь.
Когда-то выходили объемистые компьютерные книги в серии "Секреты...", например, "Секреты Unix", "Секреты Word" и пр. Вот нашелся бы кто-нибудь, кто на основе обширных материалов этого форума написал бы книгу "Секреты Cache" (про секреты Ensemble уже и не говорю, эта тема на форуме менее популярна). Цены бы не было. Осталось за малым - чтобы кто-то за это взялся - раз, и кто-то проспонсировал - два.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037780
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на счет нельзя, подсказывает просто здравый смысл, ведь это неминуемо приведет к ошибке если размер файла превысит допустимой длины строки
я если бы увидел такое в коде сразу же переписал
как переписываю и конструкции вида
while 'stream.AtEnd {
w stream.Read()
}
на
d stream.OutputToDevice()
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037791
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а из книжек, я читал только документацию по MUMPS которую мне давал почитать krvsa, когда я пришел к нему работать
дальше мне хватает стандартной документации и личного опыта
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037795
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
разумеется, мне это здравый смысл тоже подсказал. И я пробовал читать и писать в файл в цикле, порциями по 30 Кб. С тем же успехом. Причем аргумент, передаваемый по ссылке в Read, всегда правильно возвращал количество считанных символов, и общая длина obj соответствовала оригиналу. А в итоге записывалось все равно с искажениями. Что-то, видимо, изменилось в реализации File.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037846
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,
ой, а как же мне не хватает ни того, ни другого. Есть, правда, еще WRC, когда-то хорошо выручало, но меня оттуда сразу же выбросили, как только моя основная работа перестала быть связана с Cache. Вот уж, как говорится, друг познается в беде. Сейчас - удаленная подработка, поэтому нет особенно времени самому ковырять плохо документированные вещи, когда-то, однако, надо и жить. Ну а своего бывшего начальника krvsa Вы давно уже обошли, как я понимаю. Вы уже несколько лет живете и успешно работаете в Москве. krvsa эту задачу решить так и не удалось.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037854
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor я читал только документацию по MUMPS которую мне давал почитать krvsaСкорее всего, это была документация по MSM, которую мы когда-то перевели :) Сегодня подобных книг практически не найти, да и устарели они, а потребность осталась.
Наверное, мало кто заметил, что в этом году в Штатах вышла новая книга .
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037888
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyDAiMor,
наверное, нельзя. Только где, в каком авторитетном источнике по Cache это можно прочитать? В документации? Эх-хе-хе, нету там ничего.
В книжках? Раз-два и обчелся, да и там такого тоже нет.
И опять-таки - а почему нельзя? Я уже написал, что в Cache2009 это работало совершенно безукоризненно, я не помню проблем.
Откуда бедному cache-программисту черпать знания? В этом плане наш форум, конечно, бесценная вещь.
Когда-то выходили объемистые компьютерные книги в серии "Секреты...", например, "Секреты Unix", "Секреты Word" и пр. Вот нашелся бы кто-нибудь, кто на основе обширных материалов этого форума написал бы книгу "Секреты Cache" (про секреты Ensemble уже и не говорю, эта тема на форуме менее популярна). Цены бы не было. Осталось за малым - чтобы кто-то за это взялся - раз, и кто-то проспонсировал - два.

Проспонсируем, если возьмется кто.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037897
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovDAiMor я читал только документацию по MUMPS которую мне давал почитать krvsaСкорее всего, это была документация по MSM, которую мы когда-то перевели :) Сегодня подобных книг практически не найти, да и устарели они, а потребность осталась.
Наверное, мало кто заметил, что в этом году в Штатах вышла новая книга .
В нашем офисе она уже есть.
Если у уважаемого сообщества будут заказы - можем собрать и купить сразу много, для всех желающих. Это нужно? Заказы собираем?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037912
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений,

Перевод на русский планируется?
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38037993
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovЕвгений,

Перевод на русский планируется?
Пока нет - ждем появления русских писателей. И еще по этой книге нужны отзывы - кто готов написать, книгу бесплатно дадим.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038039
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений,

готов написать отзыв. Жду книгу :)
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038049
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров ЕвгенийПока нет - ждем появления русских писателей.Это правильно, пусть русские писатели напишут сразу же по-русски - тогда и переводить не придётся.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038053
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это я удачно свернул в сторону от изначальной темы поста. Может быть, пришло время отдельную тему завести? Мне кажется, вопрос того стоит.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038062
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров Евгений,
я тоже готов написать отзыв, но за халявой не гонюсь. Согласен приобрести книгу за установленную плату. Но вам ведь для этого нужно какой-то минимальный объем заказа набрать? Эх..
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038128
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyШваров Евгений,
я тоже готов написать отзыв, но за халявой не гонюсь. Согласен приобрести книгу за установленную плату. Но вам ведь для этого нужно какой-то минимальный объем заказа набрать? Эх..

Не нужен минимальный объем заказа. Но мы собираемся приобрести N-экземпляров для офиса в Москве и можем к ним добавить еще M-экземпляров для тех, кому книга реально нужна и не проблема ее забрать в нашем офисе и по каким-то причинам сложно приобрести тут .
Мы уже приобретали именно там, книга доставляется по адресу, все ок.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038137
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шваров Евгений,
хорошо, Евгений, когда можно будет подходить в офис с деньгами, сообщите, пожалуйста, постом в форуме или на мой E-mail. Буду ждать.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038301
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUyСкажите пожалуйста, можно ли с помощью гиперметода передать на сервер файл, выбранный пользователем в элементе <input type="file">? Т.е. тут проблема такая - что нужно вытащить из этого input и передать в качестве аргумента гиперметода и какой должен быть тип этого аргумента? И как принять на сервере имя файла и сам поток данных? Как принять из input'а файл на сервере по обычному submit'у формы я знаю и много раз успешно это делал, и в этом форуме эта техника неоднократно обсуждалась, а вот - гиперметод? И если не гиперметод - то, обобщая задачу, как передать на сервер файл без перезагрузки страницы, т.е. не submit'ом формы?Если использовать новые возможности HTML5 - XMLHttpRequest level 2 , File API и т.д. - всё это можно сделать даже без <input type="file"> .
Сделал два "простых" (насколько мог) ZEN-примера без form, submit, iframe, jQuery, flash, java, перезагрузки/перерисовки страницы и c отображением прогресса по каждому загружаемому файлу.
Асинхронная загрузка только одного файлаClass upload.fileOne Extends %ZEN.Component.page
{

Parameter DOMAIN = "SQL.RU";

XData Style
{
  <style type="text/css">
  </style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="Загрузка файла, используя XMLHttpRequest" labelPosition="left">
  <hgroup cellVAlign="bottom">
    <fileUpload label="Выберите файл" id="fileToUpload" onchange="zenPage.fileSelected()"/>
    <button caption="Загрузить" onclick="zenPage.uploadFile();"/>
  </hgroup>
  <label id="fileType" label="Тип: "/>
  <label id="fileName" label="Имя: "/>
  <label id="fileSize" label="Размер: "/>
  <html>
    <div id="progressNumber">%</div>
    <progress id="progressValue" value="0" max="100.0"></progress>
  </html>
</page>
}

ClientMethod uploadFile() [ Language = javascript ]
{
  var fd = new FormData();
  fd.append('fUpload', zen('fileToUpload').findElement('control').files[0]);
  var xhr = new XMLHttpRequest();
  xhr.upload.addEventListener('progress', this.uploadProgress, false);
  xhr.addEventListener('load', this.uploadComplete, false);
  xhr.addEventListener('error', this.uploadFailed, false);
  xhr.addEventListener('abort', this.uploadCanceled, false);
  xhr.open('POST', 'upload.fileOne.cls');
  xhr.send(fd);
}

ClientMethod uploadProgress(evt) [ Language = javascript ]
{
  if (evt.lengthComputable) {
    var percentComplete = Math.round(evt.loaded * 100 / evt.total);

    document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
    document.getElementById('progressValue').value = percentComplete;
  }
  else {
    document.getElementById('progressNumber').innerHTML = $$$Text('Не удаётся вычислить');
  }
}

ClientMethod uploadComplete(evt) [ Language = javascript ]
{
  zenAlert($$$Text('Загрузка завершена.'));
}

ClientMethod uploadFailed(evt) [ Language = javascript ]
{
  zenAlert($$$Text('Произошла ошибка при попытке загрузить файл.'));
}

ClientMethod uploadCanceled(evt) [ Language = javascript ]
{
  zenAlert($$$Text('Загрузка была отменена пользователем или браузер сбросил соединение.'));
}

ClientMethod fileSelected() [ Language = javascript ]
{
  var file = zen('fileToUpload').findElement('control').files[0];
  if (file) {

    var fileSize = 0;
    if (file.size > 1024 * 1024)
       fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + $$$Text('МБайт');
    else
       fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + $$$Text('КБайт');

    zenSetProp('fileType','value',file.type);
    zenSetProp('fileName','value',file.name);
    zenSetProp('fileSize','value',fileSize);
     
  }
}

ClassMethod %OnPreHTTP() As %Boolean [ ServerOnly = 1 ]
{
  #dim %request As %CSP.Request
  #dim stream As %CSP.BinaryStream=%request.GetMimeData("fUpload")
  if $IsObject(stream) {
    
    #; делаем с полученным файлом полезную работу
    
    /*
    set ^tmp("filename")=stream.FileName
    set ^tmp("filesize")=stream.Size
    */
    
    quit $$$NO
  }
  quit $$$YES
}

}
Асинхронная загрузка сразу нескольких файловClass upload.fileMany Extends %ZEN.Component.page
{

Parameter DOMAIN = "SQL.RU";

XData Style
{
<style type="text/css">
  .ok {
    color:green;
  }

  #dropZone {
    width: 360px;
    height: 125px;
    border: dashed 2px #ccc;
    background-color: #fefefe;
    color: #ccc;
    text-align: center;
    padding: 125px 0 0 0;
  }

</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="Загрузка сразу нескольких файлов, используя XMLHttpRequest">
  <html id="dropZone">Перетащите сюда файлы или воспользуйтесь кнопкой ниже</html>
  <hgroup cellVAlign="bottom">
    <html id="selectFiles" label="Выберите файлы">
      <input type="file" class="fileUpload" id="fileToUpload" onchange="zenPage.fileSelected(document.getElementById('fileToUpload').files)" multiple="multiple" />
    </html>
    <button caption="Очистить" title="Очистка очереди" onclick="zenPage.clearList();"/>
    <spacer width="10"/>
    <button caption="Загрузить" title="Загрузка файлов на сервер" onclick="zenPage.uploadFile();"/>
  </hgroup>
  <fieldSet legend="Файлы, ожидающие загрузки">
    <html id="holder"/>
  </fieldSet>
</page>
}

ClientMethod clearList() [ Language = javascript ]
{
  fileQueue=[];
  zen('holder').getEnclosingDiv().innerHTML='';
  zen('selectFiles').refreshContents();
}

ClientMethod fileSelected(files) [ Language = javascript ]
{
  var holder = zen('holder').getEnclosingDiv();
  for (var i = 0; i < files.length; i++) {
  
    var file = files[i];

    var fileSize = 0;
    if (file.size > 1024 * 1024)
      fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + $$$Text('МБайт');
    else
      fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + $$$Text('КБайт');
  
    var divInfo = document.createElement('div');
    divInfo.innerHTML=file.name+' ('+file.type+') - '+fileSize;
    holder.appendChild(divInfo);

    var divProgN = document.createElement('div');
    divProgN.id='progressNumber'+i;
    divProgN.innerHTML='%';
    holder.appendChild(divProgN);

    var prog = document.createElement('progress');
    prog.id='progressValue'+i;
    prog.max='100.0';
    prog.value='0';
    holder.appendChild(prog);

    fileQueue.push({i:i,file:file});
  }
}

ClientMethod uploadFile() [ Language = javascript ]
{
  while (fileQueue.length > 0) {
    var item=fileQueue.pop();
    uploadFile(item.file,item.i);
  }
}

ClientMethod onloadHandler() [ Language = javascript ]
{
  if (typeof FileReader == "undefined") zenAlert($$$Text('Извините, Ваш браузер не поддерживает File API, поэтому это демо не будет правильно работать'));
  fileQueue = new Array();

  uploadFile = function (file, i) {
    var xhr = new XMLHttpRequest(), upload = xhr.upload, fd = new FormData();
    
    fd.append('fUpload', file);

    upload.addEventListener('progress',
    function (evt) {
      if (evt.lengthComputable) {
        var percentComplete = Math.round(evt.loaded * 100 / evt.total);

        document.getElementById('progressNumber'+i).innerHTML = percentComplete.toString() + '%';
        document.getElementById('progressValue'+i).value = percentComplete;
        
      }
      else {
        document.getElementById('progressNumber'+i).innerHTML = $$$Text('Не удаётся вычислить');
      }
      
    }, false);
    upload.addEventListener('load', function (ev) {
      var c=document.getElementById('progressNumber'+i);
      c.className='ok';
      c.innerHTML='OK';
    }, false);
    upload.addEventListener('error', function (ev) {zenAlert($$$Text('Произошла ошибка при попытке загрузить файл.'));}, false);
    upload.addEventListener('abort', function (ev) {zenAlert($$$Text('Загрузка была отменена пользователем или браузер сбросил соединение.'));}, false);
    xhr.open('POST','upload.fileMany.cls');
    xhr.setRequestHeader('Cache-Control', 'no-cache');
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xhr.send(fd);
  }
  
  dropZone=zen('dropZone').getEnclosingDiv();
  dropZone.addEventListener('dragenter',  function(ev){
    ev.stopPropagation();
    ev.preventDefault();
  }, false);
  dropZone.addEventListener('dragleave',  function(ev){
    ev.stopPropagation();
    ev.preventDefault();
    this.style['backgroundColor'] = '#FEFEFE';
    this.style['borderColor'] = '#CCC';
    this.style['color'] = '#CCC';
  }, false);
  dropZone.addEventListener('dragover',  function(ev){
    ev.stopPropagation();
    ev.preventDefault();
    this.style['backgroundColor'] = '#F0FCF0';
    this.style['borderColor'] = '#3DD13F';
    this.style['color'] = '#3DD13F';
  }, false);
  dropZone.addEventListener('drop',  function(ev){
  ev.stopPropagation();
  ev.preventDefault();
  this.style['backgroundColor'] = '#FEFEFE';
  this.style['borderColor'] = '#CCC';
  this.style['color'] = '#CCC';
  zenPage.fileSelected(ev.dataTransfer.files);
  }, false);
}

ClassMethod %OnPreHTTP() As %Boolean [ ServerOnly = 1 ]
{
  #dim %request As %CSP.Request
  #dim stream As %CSP.BinaryStream=%request.GetMimeData("fUpload")
  if $IsObject(stream) {
    
    #; делаем с полученным файлом полезную работу
    
    /*
    set ^tmp("filename")=stream.FileName
    set ^tmp("filesize")=stream.Size
    */
    
    quit $$$NO
  }
  quit $$$YES
}

}
PS: тестировал на IE 10 for Windows 7, Opera 12.10, FF 16, Chrome 23.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038339
EvLaUy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servit,
большое спасибо, как всегда исчерпывающе. Будет полезно всем взять на вооружение. Что касается конкретно нас, мы еще не доросли до этих технологий. ZEN мы тоже не используем - аутсорсный верстальщик уже всё сверстал, дизайн и верстка утверждены, и я обязан ей следовать.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038361
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvLaUy,

Переделать эти примеры на CSP не так уж сложно, мне кажется.
Здесь проблема пока одна - поддержка старых браузеров.
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38038443
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,

спасибо!!!
...
Рейтинг: 0 / 0
Передача файлов на сервер с помощью гиперметода - is it possible?
    #38041628
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статья на хабре с моими примерами
...
Рейтинг: 0 / 0
51 сообщений из 51, показаны все 3 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Передача файлов на сервер с помощью гиперметода - is it possible?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]