none
Как загрузить файл на сервер по "внешней" ссылке от пользователя? RRS feed

  • Вопрос

  • Доброго времени суток! Изучаю asp.net mvc на конкретном для себя примере. Поставил задачей написать приложение, суть которого следующая:
    Пользователь вводит адрес в форме на некий файл в сети (например: http://www.somewhere.com/downloads/newfile.rar), затем нажимает кнопку "скачать на сервер", и файл закачивается на сам сервер (где и мое приложение) в локальную папку! После успешной закачки, генерируется ссылка (например: http://www.mysite.ru/downloads/newfile.rar) для пользователя, чтобы он мог скачать этот файл уже с самого сервера! Зачем это нужно не спрашивайте)) Предполагается закачка больших файлов (примерно 4Гб)

    Вопрос в том, как правильно построить механизм загрузки на сервер:
    1) WebClient() или HttpWebRequest() что выбрать?
    2) Нужно ли создавать отдельный поток для этих классов в момент запроса для загрузки (может быть фоновой)?
    3) Какие конфликты могут возникнуть с 2-мя и более пользователями при одновременном запросе на закачку, если обработчик этих запросов один, т.е. WebClient() или HttpWebRequest() уже "заняты" в одном из запросов, или mvc сам все "разруливает"?
    4) Как определить протокол загрузки заранее неизвестного файла? FTP или HTTP?

    Буду благодарен за ценный совет! Может какие статьи знаете?
    28 марта 2014 г. 6:17

Ответы

  • "WebClient() или HttpWebRequest() что выбрать?" - что будет вам удобней. WebClient просто обёртка вокруг WebRequest и WebResponse.

    "Нужно ли создавать отдельный поток для этих классов в момент запроса для загрузки (может быть фоновой)?" - желательно да, чтобы не использовать потоки из пула. Используйте Task TPL, для асинхронных операций. Или лучше его методы с префиксом Async, они всё сделают за вас.

    "Какие конфликты могут возникнуть с 2-мя и более пользователями при одновременном запросе на закачку, если обработчик этих запросов один, т.е. WebClient() или HttpWebRequest()" - если вы точно можете реализовать singleton (т.е. экземпляр каждого будет в домене приложения только один) то один и тот же файл будет закачивать дважды, конфликт возникнет при сохранении если имена будут одни и каталоги тоже.

    "Как определить протокол загрузки заранее неизвестного файла? FTP или HTTP?" - никак, его передаёте вы (в виде URL). Приложение само не сможет.


    Сделаем содержимое сообщества лучше, вместе!

    • Изменено YatajgaEditor 28 марта 2014 г. 9:05
    • Помечено в качестве ответа NethodmeN 28 марта 2014 г. 9:35
    28 марта 2014 г. 9:04
    Модератор