Потоковая загрузка Silverlight - PullRequest
5 голосов
/ 07 декабря 2009

У меня есть приложение Silverlight, которое должно загружать большие файлы на сервер. Я смотрел на загрузку с использованием обоих WebClient, а также HttpWebRequest, однако я не вижу очевидного способа потоковой загрузки с любым из этих вариантов. В зависимости от размера файлов загрузка всего содержимого в память перед загрузкой нецелесообразна. Возможно ли это в Silverlight?

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Вы могли бы пойти с подходом "куска". Загрузчик файлов Silverlight на Codeplex использует эту технику:

http://www.codeplex.com/SilverlightFileUpld

Учитывая размер фрагмента (например, 10 КБ, 20 КБ, 100 КБ и т. Д.), Вы можете разделить файл и отправить каждый блок на сервер с помощью HTTP-запроса. Сервер должен будет обрабатывать каждый блок и собирать файл по мере поступления каждого фрагмента. В случае веб-фермы, когда имеется несколько веб-серверов, будьте осторожны, чтобы не использовать локальную файловую систему на веб-сервере для этого подхода.

1 голос
/ 07 декабря 2009

Кажется необычным то, что WebClient в Silverlight не может предоставить средство для доставки потока на сервер с событиями прогресса. Это особенно удивительно, так как это предлагается для загрузки строки!

С помощью HttpWebRequest можно кодировать то, что, кажется, делает то, что вы хотите.

В обратном вызове для BeginGetRequestStream вы можете получить поток для исходящего запроса, а затем прочитать фрагменты из потока вашего файла и записать их в выходной поток. К сожалению, Silverlight не начинает отправку вывода на сервер, пока поток вывода не будет закрыт. Где все эти данные в конечном итоге хранятся в то время, пока я не знаю, возможно, что если он станет достаточно большим, SL может использовать временный файл, чтобы не нагружать память машины, но опять же, он может просто хранить все это в памяти в любом случае.

Единственное решение, которое возможно, это написать протокол HTTP через сокеты.

...