Asp net загрузка файлов на сервер

Asp net загрузка файлов на сервер

Во-первых, создадим в проекте папку, в которую будем загружать файлы. Пусть она будет называться Files.

Потом создадим код разметки в представлении, с помощью которого пользователь мог бы загружать файл:

Хелпер Html.BeginForm сгенерирует форму. Так как первые два параметра указывают, что форма будет обрабатываться на сервере методом Upload контроллера HomeController.

Благодаря установке атрибута формы enctype="multipart/form-data" браузер будет знать, что надо загрузить файл.

Тогда мы можем получить загруженный файл в методе действия Upload :

Переданный с клиента на сервер файл передается через объект HttpPostedFileBase .

С помощью метода SaveAs мы сохраняем файл по определенному пути на сервере. А помочь определить точный путь для сохранения поможет метод Server.MapPath() .

С помощью свойства InputStream мы можем получить поток файла и манипулировать им как обычными потоками:

Множественная загрузка файлов

При множественной загрузке файлов создаем в представлении набор элементов с типом file с одинаковым значением атрибута name :

Теперь в метода контроллера мы уже будем получать коллекцию объектов HttpPostedFileBase:

Ограничение размера файлов

Даже если мы все сделаем правильно, мы можем получить ошибку, если попытаемся загрузить файл размером больше 4 МБ. 4 мегабайта — ограничение, действующее на стороне сервера. Однако мы можм его переопределить.

| Воскресенье, 17 февраля, 2013

В прежних версиях HTML не было возможности загружать на сайт сразу несколько файлов, для этого нужно было использовать сторонние компоненты, написанные на Flash, Silverlight и т.п., которые позволяли выводить диалоговое окно выбора нескольких файлов.

В HTML5 элемент input получил новый атрибут multiple, а с ним и новую возможность выбирать в диалоге сразу несколько файлов. Кроме того, для выбора файлов только определенного типа, введен еще один новый атрибут accept, который распознает MIME media types (стандарт описывающий передачу различных типов данных в интернете).

Читайте также:  Hp scanjet 2380 драйвер windows 7

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

В HTML5 так может выглядеть код разметки для отправки файлов на сервер:

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

Прием файлов на стороне сервера.

Когда файлы загружаются на сервер c ASP.NET MVC, то нужно помнить о следующих вещах. Если загрузка идет из одного элемента input, то файлам присваивается одно и то же имя. То есть нельзя получить файл по имени управляющего элемента input.

Вместо этого можно выбрать все ключи файлов и через них же запрашивать файлы в виде HttpPostedFileBase.

Либо можно сделать еще проще, используя параметр в action-методе.

Поддержка браузеров.

Множественная загрузка — полезная функция, но она не поддерживается всеми браузерами. Как эту проблему решить? Можно добавить несколько контролов загрузки по одному файлу и дать возможность выбирать пользователю каждый файл по отдельности. Это не идеальное решение, но таким образом у пользователей хотя бы будет возможность загружать файлы на сайт, в противном случае контрол множественной загрузки просто проигнорируется.

Атрибут multiple поддерживается в Internet Explorer 10 +, Firefox 3.6 +, Opera 11.0 +, Chrome 2.0 + и Safari.

Контролер всегда получает image = null. В чем может быть проблема?

  • Вопрос задан более трёх лет назад
  • 14523 просмотра

Ошибки во всех трех местах 🙂

1. В форме добавить аттрибут name для контрола

Читайте также:  About blank что это и как убрать

2. Код в контроллере

3. В принципе без cкрипта можно и обойтись, все отправится и так, по нажатию на кнопку. Но если уж используется jQuery то вполне достаточно следующего:

Ошибки есть. Вьюшку и контроллер немного надо изменить
вью:

Ссылка на основную публикацию
Adblock detector