Как загружать большие видеофайлы с помощью класса WebClient

Я новичок и разрабатываю приложение для Windows. Мне нужно загрузить видеофайл с моего сайта, и это моя проблема здесь. Я разработал специальный загрузчик, с помощью которого я могу загружать изображения, текстовые файлы с моего сайта. Но я не смог скачать видео с моего сайта. Кто-нибудь может мне помочь..?

WebClient client = new WebClient();
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri("http://mysitename.com/Videos/vid.mp4"), "c:\\movie.mp4");

Я не хочу загружать с помощью отправки содержимого ответа, потому что мой клиент хочет, чтобы я загрузил через собственный браузер.. поэтому, пожалуйста, дайте мне знать решения от ваших экспертов.. спасибо


person Ren InfoTech    schedule 02.02.2012    source источник
comment
Если он не работает, то какое конкретное поведение он демонстрирует?   -  person M.Babcock    schedule 02.02.2012
comment
Привет, Бэбкок, это не ошибка отображения, а завершение загрузки путем размещения видеофайла размером 0 байт.   -  person Ren InfoTech    schedule 02.02.2012
comment
Когда я попытался получить доступ к URL-адресу в браузере... выдается ошибка 404. Но расположение файла правильное. Но если я получаю доступ к изображениям или txt, он отображается ... так что любой другой способ получить доступ к видеофайлу ... чтобы мой файл загружался через веб-клиент ...   -  person Ren InfoTech    schedule 02.02.2012
comment
Если доступ к URL-адресу в браузере приводит к ошибке 404, файл будет недоступен для загрузки с помощью WebClient.   -  person M.Babcock    schedule 02.02.2012
comment
Итак, как я могу загрузить видеофайл через веб-клиент.?   -  person Ren InfoTech    schedule 02.02.2012
comment
Сделайте файл доступным с сервера.   -  person M.Babcock    schedule 02.02.2012
comment
У вас есть веб-служба, которая транслирует этот видеофайл, или это просто файл на сервере, к которому вы пытаетесь получить доступ?   -  person Rajesh    schedule 02.02.2012
comment
Хм, нет, это просто видеофайл в формате mp4. Я сомневаюсь, что действительно возможно загрузить видеофайл через веб-клиент?   -  person Ren InfoTech    schedule 02.02.2012
comment
Да, с помощью WebClient можно загрузить любой файл с вашего сервера. Это просто о том, как у вас есть файл на сервере. Смотри мой ответ ниже   -  person Rajesh    schedule 02.02.2012


Ответы (2)


Я попытался загрузить видеофайл с помощью WebClient, и он работает. Моя настройка выглядит следующим образом:

У меня есть виртуальный каталог (видео) на веб-сайте по умолчанию (IIS), в котором есть этот видеофайл.

Я просто использую приведенный ниже код для загрузки видеофайла на диск C:

var client = new WebClient();
Uri address = new Uri("http://localhost/Video/wildlife.wmv");
client.DownloadFileAsync(address, @"c:\video.wmv");

Также обратите внимание, что поскольку вы загружаете в асинхронном режиме, подождите около минуты, пока операция завершится, чтобы загрузить полный файл. Первоначально он показывает 0 байтов, но в зависимости от размера требуется некоторое время для его завершения.

ОБНОВЛЕНИЕ: Если на вашем сервере не указан тип mime файла, просто добавьте его в коллекцию типов mime, которые может обслуживать IIS, и вы сможете загрузить файл без каких-либо проблем.

При добавлении типа MIME следует использовать следующие значения (для вашего сценария):

File Extension: .mp4
MIME Type: video/mp4 

Чтобы добавить типы mime в IIS, перейдите по этим ссылкам:

  1. Для IIS 4,5
  2. Для IIS 6
  3. Для IIS 7
person Rajesh    schedule 02.02.2012
comment
Привет, Раджеш.. Теперь я узнал, что определенные форматы не загружаются.. Не могли бы вы попробовать файлы .mp4.. Пожалуйста, дайте мне знать, загружаются ли они для вас? - person Ren InfoTech; 02.02.2012
comment
Да, я пробовал mp4 и сначала получил ошибку 404. Затем я просмотрел свой виртуальный каталог в IIS, а затем добавил новый тип MIME для его обслуживания. Как только это было сделано, я мог без проблем скачать файл с сервера. - person Rajesh; 02.02.2012
comment
Да, Раджеш. Я тоже только что связался с моим сторонником сервера и добавил тип MIME. Большое спасибо, Раджеш. У меня тоже есть некоторые сомнения в синхронизации прогрессбара с загрузками.. - person Ren InfoTech; 02.02.2012

Это больше похоже на проблему с сервером, но если вы сомневаетесь в своем коде, вы можете попробовать синхронизировать загрузку (в прошлом у меня были проблемы с асинхронной загрузкой). Другой способ — использовать класс WebRequest. Если этот сервер очень удаленный, попробуйте заранее пропинговать. Я думаю, что вам также следует проверить, находится ли файл на сервере, и если файл действительно большой, вы должны проверить, завершилась ли загрузка файла.

person seesharper    schedule 02.02.2012
comment
Я загрузил образец (1 МБ) видеофайла и уверен, что он на сервере. Я также пытался использовать как метод DownloadFile, так и метод DownloadFileAsync. Но это не работает. Реально ли скачать видео файл через вебклиент? - person Ren InfoTech; 02.02.2012
comment
Что вы пытаетесь сделать с видеофайлом? Это может помочь узнать, поскольку ваша проблема может быть там. - person seesharper; 02.02.2012