Прочитав все посты про загрузку больших файлов в csdn, я написал вот эту фигню. (:-))
Есть несколько способов загрузить большие файлы:
1. Метод HttpWorkerRequest Sigui слишком сложен для понимания:-(
2. Используйте сторонний элемент управления AspNetUpload для запроса денег! ! Забудьте об этом, мы все еще любим бесплатность.
3. Измените файл web.config, но не можете отловить ошибки.
4. Загрузить через ftp. Сервер должен предоставлять услуги FTP.
У нас нет другого выбора, кроме как выбрать третий путь. Кто делает нас такими глупыми! (Это слишком глупо. Это не имеет значения. Вам следует есть больше рыбы. Я слышал, что употребление рыбы может сделать вас умнее.)
Тогда внимательно изучите третий метод!
Измените файл Webcong:
<система.веб>
<httpRuntime maxRequestLength="40690"
useFullyQualifiedRedirectUrl="true"
выполнениеTimeout="6000"
useFullyQualifiedRedirectUrl="false"
минFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
EnableVersionHeader="истина"
/>
</system.web>
Среди них те, которые тесно связаны с загрузкой:
Максреквестлингс
Указывает максимальный размер загружаемого файла, поддерживаемый ASP.NET.
Это ограничение можно использовать для предотвращения атак типа «отказ в обслуживании», вызванных передачей пользователями большого количества файлов на сервер.
Указанный размер указан в КБ.
Значение по умолчанию — 4096 КБ (4 МБ).
выполнениеTimeout
Указывает максимальное количество секунд, в течение которых разрешено выполнение запроса, прежде чем ASP.NET автоматически закроет его.
Единица измерения — секунды. Установите большее значение при загрузке больших файлов.
Если память сервера составляет 512 МБ, можно загружать файлы размером 160 МБ. (Я не пробовал. Это единогласное мнение многих постов на csdn.)
'www.downcodes.com
На этом настройка web.config закончилась.
Однако, как только размер загруженного файла превысит установленный диапазон размеров файла, произойдет следующая ошибка:
Страница не может быть отображена. Страница, которую вы хотите просмотреть, в настоящее время недоступна. Возможно, на веб-сайте возникли технические проблемы или вам может потребоваться изменить настройки браузера.
Хотя эту ошибку невозможно решить, нам все равно нужно отловить эту ошибку! Что делать?
Недавно я съел немного рыбы и задумался об этом. Поскольку эта ошибка является ошибкой на переднем плане, вызванной управлением файлами, невозможно использовать try...catch для ее перехвата в фоновом режиме.
Поэтому я подумал об использовании механизма страницы захвата ошибок .NET для их обработки. Это выполнимо.
1. Сначала настройте web.config
<customErrors mode="Вкл"/>
2. Создайте новый файл error.aspx специально для перехвата ошибок.
3. Добавьте директиву page на главную страницу aspx-страницы, куда загружается файл. ErrorPage="UploadError.aspx"
4. Добавьте код в error.aspx, чтобы определить, является ли сообщение об ошибке основной ошибкой, вызванной файлом.
общедоступный класс UploadError: System.Web.UI.Page
{
частная пустота Page_Load (отправитель объекта, System.EventArgs e)
{
Исключение ex = Server.GetLastError();
если (например!= ноль)
{
Response.Redirect("../error.aspx");
}
else //Ошибка переднего плана ex имеет нулевое значение
{
Response.Redirect("uploadexcel.aspx?err=1"); //Переходим на страницу загрузки и добавляем параметр err для отображения сообщения об ошибке.
}
}
5. Отображение сообщения об ошибке.
загрузка общедоступного класса Excel: System.Web.UI.Page
{
частная пустота Page_Load (отправитель объекта, System.EventArgs e)
{
если (Запрос["err"] == "1")
{
Page.RegisterStartupScript("бюджет","<script Language = javascript>alert('Не удалось загрузить файл! Размер файла слишком велик!')</script>");
}
}
}
6. Сделайте это и закончите. (Эта рыба не бесплатна.)
После вышеуказанной модификации загрузка теперь становится такой, что программа указывает размер файла. Если он превысит, появится сообщение об ошибке.
Таким образом, это будет намного лучше, по крайней мере, я смогу это принять, и это не будет слишком сложно объяснить пользователям.