Как стать автором
Обновить

Комментарии 48

Спасибо за статью очень интересно. Тем более что на русском языке по silverlight мало статей еще а технология очень интересная и на мой взгляд перспективная.
Понравилось… пиши еще!
Интересная статья! Пасиб! Я вот думаю в ближайшем будущем может быть придется заняться вплотную си-шарпом, возможно и веб технологиями с использованием оного, так что надо взять эту статейку на заметку :)
Если честно мало что понял (я не программист), но то как написана статья и на какую тему очень приятно. побольше бы таких статей! Спасибо автору.
Огромный плюс в том, что Silverlight активно расширяет свое влияние и теперь работает даже под линуксом (Moonlight), правда, пока только в Firefox, но это ненадолго. Соответственно, веб-приложения на нем скоро будут доступны пользователям всех основных браузеров на виндоус, маке и лунуксе и сомнений перед выбором этой технологии станет меньше.

Автору спасибо за хорошую статью — добавил в избранное.
НЛО прилетело и опубликовало эту надпись здесь
Ну а что вы хотели, у вас же Moonlight, а не Silverlight стоит, вот и предлагают поставить. Moonlight позволяет запускать Silverlight-приложения под линуксом, но называется-то он по-другому. Возможно, еще роль играет ранняя версия самого Moonlight — он же еще даже до первой версии не дошел (официальная последняя, вроде, 0.7), а его майкросовтовский отец уже 2b2. Думаю, MS предлагает как раз самую последнюю версию поставить, а всех её стандартов Moonlight еще не поддерживает.
НЛО прилетело и опубликовало эту надпись здесь
Думаю не стоит торопится с выводами — сколько времени уже существует Flash и сколько времени SL? Еще надо учесть что SL с поддержкой языков .NET только в Beta версии. Но уже в таком «младенческом» возрасте SL очень даже неплохо себя проявляет.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
> Но отсутствие кросс платформенности удручает

Если речь идет о 100%-ной кросс-платформенности, то да — Linux-версия работает, но не полностью.
Однако поддержка различных Windows и Mac OS X есть полностью.
Здесь совсем другой случай. Над проектом Mono, частью которого является Moonlight, сейчас работает Novell с подачи и с активной поддержкой MS и идет семимильными шагами. К тому же сам Silverlight еще достаточно молод и еще рано что-то говорить, но сама технология очень перспективная и обладает огромным потенциалом.
Да, Дима, лучше тоже самое но на JS, мне лично интереснее это:)
Об этом на JS уже много раз писалось. А здесь поле непаханное…
Ниодного нормального решения не помню, везде или флэш или cgi в нагрузку идет.
Дык, чисто на JS это не возможно :)
Дык, а вот это как раз и хреново :). C PHP тоже как понимаю невозможно.
Возможно, но тоже не переносимо. Под виндой надо запускать ActiveX-компонент, который работает с файлами.

Но там с безопасностью заморочки. Мне удавалось такое сделать, но по большому счёту, это решение только для интранета.

В интернете давать доступ к своим файлам с любой страницы (хотя бы и на чтение) — уже опасно.
Согласитесь, что ActiveX — это уже не чисто JS.
Соглашусь.

Потому и AJAX на чистом JavaScript тоже сделать нельзя. :)
на тему закачивания файлов на сервер:
есть замечательная библиотека флеш+яваскрипт.
флеш для того чтобы можно было выбирать несколько файлов сразу.
апи предоставляется через яваскрипт чтобы реализовывать всякие красивости :)

swfupload.org/
Интересно было бы посмотреть на устройство внутри.
там на сайте можно скачать все исходники и примеры.
флеш можно декомпилировать
гг. ну не хотите не нада :)
не сочтите за холивар, но на flash + php проще выглядит
Не сочту, наоборот, хотелось бы глянуть. Здесь, например, от силы 100 строк кода (с коментами).
НЛО прилетело и опубликовало эту надпись здесь
очень подробную документацию можно найти на офиц. сайте Silverlight.net

silverlight.net/learn/learnvideo.aspx? video=69793 — тот же самый uploader вместе с кодом и видеотуториал.

silverlight.net/learn/videocat.aspx? cat=2#HDI2Basics — огромное число роликов начиная как сделать собственное окно — когда не утсановлен SL и создание первого приложения — до вещей как сделать собственные контролы, шаблоны и стили контролов, хоткей, запросы к сервисам и многое другое.

silverlight.net/quickstarts/managed.aspx
msdn.microsoft.com/en-us/library/bb404700(VS.95).aspx — документация по SL

silverlight.net/Community/communitygallery.aspx — множество семплов с исходными кодами — тоже приводится примеры как сделать простейшие игры — до примеров по работе с картами VirtualEarth и т.п.

НЛО прилетело и опубликовало эту надпись здесь
// Делаем все не во флексе, а во флэше, на сцене у нас лежат 2 компоненты:
// txtStatus - это Label, хотя можно было бы использовать и обычное текстовое поле
// btnBrowse - это Button, хотя можно было использовать вообще любой InteractiveObject

// у кнопки слушаем клик по ней
btnBrowse.addEventListener( MouseEvent.CLICK, onBrowse );

function onBrowse( e:MouseEvent ):void {
	// При клике по кнопке запускаем пользовательский выбор файла через системное окно 
	var fr:FileReference = new FileReference();
	fr.addEventListener( Event.SELECT, onSelect );
	fr.browse( [new FileFilter( "Image files", "*.jpg;*.gif" )] );
}

function onSelect( e:Event ):void {
	var fr:FileReference = FileReference( e.target );
	// После того, как пользователь выбрал файл, мы объекту FileReference вешаем обработчики событий на
	// 2 события - прогресс закачки (показываем сколько загрузилось) и окончание закачки (сообщаем об этом)
	fr.addEventListener( ProgressEvent.PROGRESS, function( e:ProgressEvent ):void {
		txtStatus.text = e.bytesLoaded + "/" + e.bytesTotal;
	} );
	fr.addEventListener( Event.COMPLETE, function( e:Event ):void {
		txtStatus.text = "Success!";
	} );
	fr.upload( new URLRequest( "http://www.mysite.ru/upload.php" ) );
}


Не умею красиво форматировать в комментариях. Написано на 3-м ActionScript-е, но в немного олдскульном стиле, без явного описания класса. PHP-ную часть не хочу приводить, чтобы не позориться — не моя область :), хотя тестовый вариант из 3х строк нормально работает.
Отличный пример, спасибо! Еще один вопрос: а при отправке интерфейс флеша не подвисает? Т.е. если будут другие кнопки с обработчиками, то в момент отправки файла, они будут работать?
Нет, как и все подобные методы в экшн-скрипте, метод upload у объекта FileReference является асинхронным — будут работать обработчики, проигрываться анимация и т.д.
Круто! Очень элегантно и действительно просто. Надеюсь Adobe скоро создаст расширения для Visual Studio, чтобы можно было легко работать в привычной (.net разработчикам) среде, используя все средства отладки. Я слышал, они уже над этим работают.
Делать им больше нечего:)
НЛО прилетело и опубликовало эту надпись здесь
Да нет, фильтр можно было бы вообще не ставить, но загрузка картинок — это самый распространенный случай (в моей практике).
Функция в функции — зло? В этом случае считаю, что так код читается лучше, чем объявлять 2 дополнительные функции по одной строчке каждая, которые нигде больше не вызываются.
Ошибки не обрабатываются, да. Но я же не готовый загрузчик предлагаю, это всего лишь concept proof. Так-то много к чему можно придраться.
НЛО прилетело и опубликовало эту надпись здесь
тем более в хелпе лежит готовый аплоадер уже )))
вот пример — www.olexandr.net/content/upload/
скачал, посмотрел, не понравилось. У меня новости Вконтакте съезжают. Хотя, даже если бы не съезжали, все ровно не поменял бы на мою Мозилку :)
PS: скриншот съезда новостей в ИЕ8
Топиком ошиблись? Или хабр глючит :)
Ой… Очень извиняюсь за свою невнимательность :( 20 вкладок Хабра, наверное промазал случайно
Несколько комментариев к статье и комментариям :)
1. Silverlight клиент есть не только под виндовс, но и под OS X. Это по сути мини CLR, то есть .NET Framework. Разумеется этого клиента можно было сделать под линукс, но микрософт понятное дело это не сделает.
2. Приведенный код по сути не показывает основную идею реализованную в WCF и которая здесь используется — транспорт «тяжелых» бинарных данных с гарантированной доставкой. Поэтому и chunks c MTOM coding. Эти решения широко применяются для реализации data транспорта в бизнес системах c Web services.
3. Более того, WCF по сути следующая версия довольно старой библиотеки MS WSE 2.0 (web service extensions), которая делала все то же самое в смысле транспорта, но была сама «легче» и работает под .NET 2.0. С помощью нее приходилось делать веб решение подобное download менеджерам (reget), но только на upload. С поддержкой веб кластеров, load balancing, докачек, сохранения статусов недокачанных файлов и гарантированной закачки любого количества гигабайтов через любой коннект (хоть dial up). Решение работает стабильно в течение полугода в боевых условиях.
Если интересно хабро-народу, то могу описать это решение более детально. Если хватит кармы на публикацию есс-но :)
В данном примере можно было обойтись и без chunks, передавать напрямую Stream, но тогда пришлось бы уделить больше внимания настройке сервиса, т.к. без проблем передаются только маленькие объёмы данных.
Наконец, можно было вообще обойтись без WCF сервиса, воспользоваться .ashx файлом. Но это не тема данного топика. Я же просил, не придерайтесь к сервису :)
Я Вам поднял кармы, интересно почитать ваше решение.
Добавил кармы ждем статьи
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории