|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Уважаемые коллеги, У меня технический вопрос, на который, вероятно, кто-нибудь знает ответ. Скажите пожалуйста, можно ли с помощью гиперметода передать на сервер файл, выбранный пользователем в элементе <input type="file">? Т.е. тут проблема такая - что нужно вытащить из этого input и передать в качестве аргумента гиперметода и какой должен быть тип этого аргумента? И как принять на сервере имя файла и сам поток данных? Как принять из input'а файл на сервере по обычному submit'у формы я знаю и много раз успешно это делал, и в этом форуме эта техника неоднократно обсуждалась, а вот - гиперметод? И если не гиперметод - то, обобщая задачу, как передать на сервер файл без перезагрузки страницы, т.е. не submit'ом формы? Ссылки на известные opensource-загрузчики у меня есть, я многие из них посмотрел в деле, но мне не хотелось бы встраивать их в свою довольно сложную верстку. Заранее спасибо за ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 16:21 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Вот увидел сравнительно недавний пост от YMKA2007 (мне кажется, я знаю этого человека, хотя до конца не уверен). Обратил внимание на следующую его фразу: "в примерах практически все через PHP реализовано, более менее понятно что там происходит но как такую серверную часть организовать для нашего любимого Cache ? (видать мозги мои совсем перестали работать)" Но ответа в переписке по этому посту так и не нашел. Неужели никто еще этого не делал? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 16:32 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
решение на Cache не будет отличаться от PHP ищем любой готовый загрузчик файлов на jQuery или без него чаще всего это готовые наборы только части со стороны браузера там должно быть в настройках компоненты что-то типа на какой URL отправить файл и с какими дополнительными параметрами ну а вот в качестве этого URL указываем нашу страничку на Cache, и там ловим файл и сохраняем у себя, куда сохранить правильно помогут дополнительные параметры. на самом деле все это теория, не было пока необходимости задействовать чужие компоненты, у нас используется все свое для этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 16:50 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, да, конечно, у вас всё своё. У вас очень мощная компонента MultipleFile на java-апплете с богатым функционалом. Ох, сколько же труда было в нее вложено! Моего в том числе. Насчет гиперметода я, наверное, несколько размечтался. Вот, нашел очень полезную ссылку: http://webguruz.ru/web-developer/ajax-upload-files/ Наверное, так и сделаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 17:11 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUyDAiMor, да, конечно, у вас всё своё. У вас очень мощная компонента MultipleFile на java-апплете с богатым функционалом. Ох, сколько же труда было в нее вложено! Моего в том числе. Насчет гиперметода я, наверное, несколько размечтался. Вот, нашел очень полезную ссылку: http://webguruz.ru/web-developer/ajax-upload-files/ Наверное, так и сделаю. Java-апплет, к счастью не используется, он там нафиг не нужен, от него был нужен один функционал это сканирование а все остальное можно реализовать и на чистом JS этот гребанный MultipleFile, руки бы поотрывать кто его таким придумал, ну это так просто мысли вслух ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 17:17 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, М-да. Бросаться сами понимаете чем в своих предшественников, на плечах которых стоИте, - не признак хорошего тона. Ну да ладно. Во-первых - не будем выходить за рамки темы поста, во-вторых, мне это уже давно, сами понимаете, совершенно безразлично. Включая MultipleFile. Что касается темы. Тут вот ведь какой вопрос. Как принять файл из элемента <input type="file"> на стороне Cache всем хорошо известно. Но ведь в этих jQuery-загрузчиках - там ведь не input со своим именем и не форма, там, как Вы справедливо написали, всё по-другому настраивается. Так вот, каков в связи с этим должен быть код приема файла в Cache? Ведь наверное уже не таким, как из input? Имеет кто-нибудь success story на эту тему? "Так же как в PHP" - это не ответ, его нельзя применить на практике, если у нас не PHP, а Cache. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 17:28 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 17:43 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, спасибо за ответ. Я нигде в этом форуме не позиционировал себя как "опытного человека", так что Ваша ирония не вполне уместна. И потом - с каких пор на этом форуме принято отвечать типа " а вы могли бы и сами ..."? Что-то не припоминаю. Вас ведь все-таки как никак номинируют на СacheMan или как там это называется. Фрагмент кода, который Вы привели, мне, разумеется, хорошо известен. Обратите внимание. В этом фрагменте используется переменная fieldName. Так вот, я еще раз повторю - для input с этим все ясно, там есть атрибут name, и я знаю на стороне сервера чему он равен, а для jQuery-аплоадера такого атрибута нет, потому что там нет формы как таковой. Вы правы, можно, перебрав на стороне сервера, все названия полей пришедшего объекта %request, понять, как же приходит этот файл или файлы, и я, разумеется, могу это проделать, задача решаемая. Меня интересовало, делал ли такое УЖЕ кто-нибудь из участников форума, кто мог бы поделиться успешным опытом и сэкономить время. Тот же вопрос, как я понимаю, интересовал и Ymka2007. Нет так нет. Еще раз благодарю за отклик. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 18:03 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Часто у нас здесь фигурирует форма помощи(и не только от меня): а покажите что вы сделали вообще и мы покажем где у вас не так. в частности в моем небольшом известном вам куске кода, есть условие по условию передачи через форму либо нет, когда указано поле либо нет. PS. на счет позиционирования, еще как позиционировали, из того что быстро нашел тут ну и в любом случае у меня у самого опыта работы с Cache всего то лет 5, что возможно меньше вашего ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2012, 18:21 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUy, приветствую )) да тоже дошел до этого, но файл категорически не хотел записываться и сохранятся, хотя все параметры %request.MimeData на стороне сервера я получал ))) как то так )) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 13:31 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
зато удалось прикруть imageArreaSelect и получил возможность вырезать куски из фото определенных заданных размеров в разумных пределах ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 13:35 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Ymka2007, спасибо за доброжелательный отклик. Ну вот, я так и подозревал, что не так-то просто всё окажется. Рассуждения - это одно, а наличие или отсутствие реальной success story - совсем другое. Я сейчас прикручиваю решение, ссылку на которое дал выше в этом же посте. Пока в процессе. Если это действительно работает - меня вполне устроит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 13:43 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUy, удачи, надуюсь все получится и решением поделитесь!? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 14:32 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
наваял пример работы с Ajax загрузкой файлов на сервер с использованием сторонних компонент в качестве компоненты для загрузки файлов используется FineUploader так же добавил Bootstrap, как и они в своих примерах в архиве статика и кашевая часть в test.FileUpload.CLS.xml я тестил на Ensemble 2010 проверял в GoogleChrome, IE9 и iPad с iOS 6 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:24 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, здорово! С удовольствием посмотрю. Вы знаете, а я ведь тоже смотрел и тестировал именно fineuploader и задавая свой вопрос, именно эту компоненту и имел в виду. Теперь даже и неловко, что, получается, отнял у Вас время, которого, с учетом нагрузок в компании Летограф, и так всегда не хватает. Если это действительно success story, все свои критические выпады беру обратно и присоединяю свой голос в поддержку Вашей кандидатуры на звание CacheMan. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:31 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUy, там правда в примере нету сохранения самого файла на сервере куда надо, но поток с файлом получен, и остается за малым его сохранить ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:34 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, ну если поток получен, то остальное - не вопрос. Что ж, мы его уже на диск в виде файла не сохраним? Плавали - знаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:37 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, БРАВО ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:22 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Кстати, а как вообще делается загрузка файлов? Общая схема? Понятно, что с помощью input type=file, но ведь далеко не всегда же? флеш, ява? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 19:40 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Блок А.Н.Кстати, а как вообще делается загрузка файлов? Общая схема? Понятно, что с помощью input type=file, но ведь далеко не всегда же? флеш, ява? в большинстве случаев, для современных браузеров ограничивается JS, для проблемных браузеров, может применятся Flash, Java в совсем запущенных случаях мой пример работает на iPad где нет ни Java ни Flash, не вдавался в технологию работы стороннего компонента, ну думаю это как то можно все получить на уровне DOM и js, ну а дальше обычный Ajax, но в любом случае все это через стандартный <input type='file'/> ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 20:43 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
На уровне dom и JS можно получить объекты браузера. А как получить файл? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 20:47 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Блок А.Н.На уровне dom и JS можно получить объекты браузера. А как получить файл? мельком глянул код FineUploader, похоже что там все сводится к тому что там все работает по самому простому варианту создается iframe в нем форма, и туда копируется наше поле с файлом, и эта форма POSTом сабмитится на сервер но в HTML5 есть уже FileAPI , что позволяет работать с файлами в самом браузере не задействуя сервер, вплоть то модификации изображений, да и всего чего угодно, если сможешь на JS реализовать работу с бинарным файлом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 21:18 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, я так понял проблему с iPad удалось разрешить? на какой версии iOS ? залить на сервак удалось только картинку? или другие файлы так же прокатят? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 11:21 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, Хм. Я пробовал изменять значение input type=file и сабмитить, но это не работает. Про то, что можно создать уже заполненную страницу и сабмитить ее, я даже не подумал. А выбор нескольких файлов делается как, в общих словах? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 11:35 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Ymka2007DAiMor, я так понял проблему с iPad удалось разрешить? на какой версии iOS ? залить на сервак удалось только картинку? или другие файлы так же прокатят? iOS только 6 версии, при нажатии предлагал сфотографировать или выбрать из имеющихся фотографий вроде как можно поставить тип разрешенных файлов, но я не пробовал, не стал заморачиваться с закидыванием на него других файлов. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 11:36 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Блок А.Н.DAiMor, Хм. Я пробовал изменять значение input type=file и сабмитить, но это не работает. Про то, что можно создать уже заполненную страницу и сабмитить ее, я даже не подумал. А выбор нескольких файлов делается как, в общих словах? атрибут multiple для input ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 12:01 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Блок А.Н., программно заполнить именем файла элемент input нельзя - такая возможность исключена во всех браузерах по соображениям безопасности. В самом деле, в этом случае браузер мог бы сам, втайне от пользователя, создавать инпуты, тянуть с компа какие-то файлы и отправлять их на сервер. Поэтому выбрать файл можно только вручную, через файловый диалог. Если, конечно, Вы именно это имели в виду. Атрибут multiple работает во всех броузерах, кроме IE, во всяком случае, в 8 версии точно не поддерживается, в 9 - не пробовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 12:33 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUyБлок А.Н., программно заполнить именем файла элемент input нельзя - такая возможность исключена во всех браузерах по соображениям безопасности. В самом деле, в этом случае браузер мог бы сам, втайне от пользователя, создавать инпуты, тянуть с компа какие-то файлы и отправлять их на сервер. Поэтому выбрать файл можно только вручную, через файловый диалог. Если, конечно, Вы именно это имели в виду. Атрибут multiple работает во всех броузерах, кроме IE, во всяком случае, в 8 версии точно не поддерживается, в 9 - не пробовал. под программным заполнением я имел ввиду, копирование dom, т.е. получаем объект поля через getElementById, и копируем его в форму через appendChild по приведенной мной ссылке про multiple, начиная с IE10, и все остальные большие браузеры, на мобильных тоже не доступен ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 12:39 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Методика, описанная в ссылке, которую я дал в этом же посте выше, работает. Во всяком случае, у меня получилось. Есть только нюанс в серверном приеме файла в 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 этот вариант понравился (еще бы!), мне тоже. Всем нравится то, что работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 12:42 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
искажения возможны если где то используется CharacterStream, из-за чего он может его конвертировать на лету, для бинарных файлов конечно такое опасно конструкцию вида Код: plaintext
это потенциально приведет к ошибке для копирования стримов, есть метод CopyFrom ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 12:50 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, наверное, нельзя. Только где, в каком авторитетном источнике по Cache это можно прочитать? В документации? Эх-хе-хе, нету там ничего. В книжках? Раз-два и обчелся, да и там такого тоже нет. И опять-таки - а почему нельзя? Я уже написал, что в Cache2009 это работало совершенно безукоризненно, я не помню проблем. Откуда бедному cache-программисту черпать знания? В этом плане наш форум, конечно, бесценная вещь. Когда-то выходили объемистые компьютерные книги в серии "Секреты...", например, "Секреты Unix", "Секреты Word" и пр. Вот нашелся бы кто-нибудь, кто на основе обширных материалов этого форума написал бы книгу "Секреты Cache" (про секреты Ensemble уже и не говорю, эта тема на форуме менее популярна). Цены бы не было. Осталось за малым - чтобы кто-то за это взялся - раз, и кто-то проспонсировал - два. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:01 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
на счет нельзя, подсказывает просто здравый смысл, ведь это неминуемо приведет к ошибке если размер файла превысит допустимой длины строки я если бы увидел такое в коде сразу же переписал как переписываю и конструкции вида while 'stream.AtEnd { w stream.Read() } на d stream.OutputToDevice() ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:07 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
а из книжек, я читал только документацию по MUMPS которую мне давал почитать krvsa, когда я пришел к нему работать дальше мне хватает стандартной документации и личного опыта ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:10 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, разумеется, мне это здравый смысл тоже подсказал. И я пробовал читать и писать в файл в цикле, порциями по 30 Кб. С тем же успехом. Причем аргумент, передаваемый по ссылке в Read, всегда правильно возвращал количество считанных символов, и общая длина obj соответствовала оригиналу. А в итоге записывалось все равно с искажениями. Что-то, видимо, изменилось в реализации File. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:14 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor, ой, а как же мне не хватает ни того, ни другого. Есть, правда, еще WRC, когда-то хорошо выручало, но меня оттуда сразу же выбросили, как только моя основная работа перестала быть связана с Cache. Вот уж, как говорится, друг познается в беде. Сейчас - удаленная подработка, поэтому нет особенно времени самому ковырять плохо документированные вещи, когда-то, однако, надо и жить. Ну а своего бывшего начальника krvsa Вы давно уже обошли, как я понимаю. Вы уже несколько лет живете и успешно работаете в Москве. krvsa эту задачу решить так и не удалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:35 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
DAiMor я читал только документацию по MUMPS которую мне давал почитать krvsaСкорее всего, это была документация по MSM, которую мы когда-то перевели :) Сегодня подобных книг практически не найти, да и устарели они, а потребность осталась. Наверное, мало кто заметил, что в этом году в Штатах вышла новая книга . ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:37 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUyDAiMor, наверное, нельзя. Только где, в каком авторитетном источнике по Cache это можно прочитать? В документации? Эх-хе-хе, нету там ничего. В книжках? Раз-два и обчелся, да и там такого тоже нет. И опять-таки - а почему нельзя? Я уже написал, что в Cache2009 это работало совершенно безукоризненно, я не помню проблем. Откуда бедному cache-программисту черпать знания? В этом плане наш форум, конечно, бесценная вещь. Когда-то выходили объемистые компьютерные книги в серии "Секреты...", например, "Секреты Unix", "Секреты Word" и пр. Вот нашелся бы кто-нибудь, кто на основе обширных материалов этого форума написал бы книгу "Секреты Cache" (про секреты Ensemble уже и не говорю, эта тема на форуме менее популярна). Цены бы не было. Осталось за малым - чтобы кто-то за это взялся - раз, и кто-то проспонсировал - два. Проспонсируем, если возьмется кто. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:47 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Alexey MaslovDAiMor я читал только документацию по MUMPS которую мне давал почитать krvsaСкорее всего, это была документация по MSM, которую мы когда-то перевели :) Сегодня подобных книг практически не найти, да и устарели они, а потребность осталась. Наверное, мало кто заметил, что в этом году в Штатах вышла новая книга . В нашем офисе она уже есть. Если у уважаемого сообщества будут заказы - можем собрать и купить сразу много, для всех желающих. Это нужно? Заказы собираем? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:49 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Евгений, Перевод на русский планируется? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 13:55 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Alexey MaslovЕвгений, Перевод на русский планируется? Пока нет - ждем появления русских писателей. И еще по этой книге нужны отзывы - кто готов написать, книгу бесплатно дадим. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 14:14 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Евгений, готов написать отзыв. Жду книгу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 14:29 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Шваров ЕвгенийПока нет - ждем появления русских писателей.Это правильно, пусть русские писатели напишут сразу же по-русски - тогда и переводить не придётся. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 14:31 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Вот это я удачно свернул в сторону от изначальной темы поста. Может быть, пришло время отдельную тему завести? Мне кажется, вопрос того стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 14:33 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Шваров Евгений, я тоже готов написать отзыв, но за халявой не гонюсь. Согласен приобрести книгу за установленную плату. Но вам ведь для этого нужно какой-то минимальный объем заказа набрать? Эх.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 14:36 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUyШваров Евгений, я тоже готов написать отзыв, но за халявой не гонюсь. Согласен приобрести книгу за установленную плату. Но вам ведь для этого нужно какой-то минимальный объем заказа набрать? Эх.. Не нужен минимальный объем заказа. Но мы собираемся приобрести N-экземпляров для офиса в Москве и можем к ним добавить еще M-экземпляров для тех, кому книга реально нужна и не проблема ее забрать в нашем офисе и по каким-то причинам сложно приобрести тут . Мы уже приобретали именно там, книга доставляется по адресу, все ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 15:02 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
Шваров Евгений, хорошо, Евгений, когда можно будет подходить в офис с деньгами, сообщите, пожалуйста, постом в форуме или на мой E-mail. Буду ждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 15:06 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
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 } } ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 16:12 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
servit, большое спасибо, как всегда исчерпывающе. Будет полезно всем взять на вооружение. Что касается конкретно нас, мы еще не доросли до этих технологий. ZEN мы тоже не используем - аутсорсный верстальщик уже всё сверстал, дизайн и верстка утверждены, и я обязан ей следовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 16:28 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
EvLaUy, Переделать эти примеры на CSP не так уж сложно, мне кажется. Здесь проблема пока одна - поддержка старых браузеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 16:36 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
servit, спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 17:17 |
|
Передача файлов на сервер с помощью гиперметода - is it possible?
|
|||
---|---|---|---|
#18+
статья на хабре с моими примерами ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 15:01 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1557308]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 188ms |
0 / 0 |