asp.net mvc размер загружаемого изображения - PullRequest
1 голос
/ 10 марта 2009

Как я могу проверить размер изображения, загружаемого пользователем? Клиентская сторона сначала с двойной проверкой на стороне сервера будет лучшим решением.

Ответы [ 2 ]

3 голосов
/ 10 марта 2009

То, что вы описываете, является окончательной битвой за получение дополнительной информации о HttpFileUpload в спецификациях HTML 2.0, поскольку это спецификация HTML, на которую вы ссылаетесь для формы POST. К сожалению, HttpFileUpload не позволяет вам получить это - даже в Javascript. Это очень распространенная проблема.

Два решения:

  • Обычное решение - изменить ваш файл web.config и изменить время выполнения http (как долго разрешать загрузку, например, 30 минут для большого файла) и размер файла http, чтобы увеличить ограничение (по умолчанию 4 МБ ). Это относится к Ruby / php, ASP.NET и ASP.NET MVC - это относится ко всем языкам, поскольку это спецификация HTML 2.0, которая ограничивает данные HttpFileUpload, которые вы можете получить в форме POST. Это позволит пользователю загрузить весь файл; и затем вы обработаете ограничения с вашей стороны в коде сервера. Не лучшее решение; но это единственное решение, если вы не используете третью часть.

  • Использовать сторонний плагин "file monitor".

Один из самых простых, что я видел, это RadControls от Telerik. Что эти элементы управления делают с нами, они устанавливают HttpModule, HttpHandler и специальный javascript. Есть несколько сторонних организаций, которые это делают, но в основном это так:

  • Javascript захватывает отправку HttpFileUpload и перенаправляет форму POST в специальный обработчик (например, /RadControlsUploadHandler.asmx).
  • RadControlsUploadHandler обновляет статическую переменную фактических байтов, загруженных в реальном времени.
  • Затем Javascript загружает всплывающее окно «Progress Bar», константа которого попадает в RadControlsUploadHandler.asmx для обновления «Status». Это обновление состояния выполняет модуль HttpModule, который считывает данные статической переменной, находящиеся в процессе обработки исходного сообщения формы, в тот же обработчик.
  • Затем модуль возвращает данные JSON обратно через ajax-вызов «Progress Bar», давая информацию о количестве загруженных байтов, предполагаемой пропускной способности и т. Д.

Вот демоверсия загрузки индикатора прогресса Telerik:

http://demos.telerik.com/aspnet-ajax/upload/examples/customprogress/defaultcs.aspx

Лично мне не нравится не знать, как они блокируют поток для этих загрузок - поскольку у меня есть проблемы с масштабируемостью при использовании этих сторонних инструментов при интенсивном использовании. Но для блога Джо Блоу они являются отличными инструментами.

Проблема с ASP.NET MVC

Проблема с этими сторонними инструментами заключается в том, что они работают только в ASP.NET WebForms - стандартном ASP.NET. ASP.NET MVC удаляет всю концепцию ASP.NET WebForms, что делает эти элементы управления бесполезными.

Хм, возможно, есть новый проект для кого-то, чтобы написать. :)

1 голос
/ 10 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...