ASP.NET- 큰 파일을 업로드 할 때 오류 페이지를 표시하는 방법 (최대 요청 길이 초과)?
-
02-07-2019 - |
문제
응용 프로그램은 OnError에서 오류를 기록 할 수 있지만 사용자에게 의미있는 것을 보여주기 위해 리디렉션 등을 수행 할 수 없습니다. 어떤 아이디어? Web.config에서 MaxRequestLength를 설정할 수 있지만 어쨌든 사용자는이 한계를 초과 할 수 있으며 일부 정상 오류를 표시해야합니다.
해결책
당신은 당신의 web.config에서 maxRequestLength를 설정할 수 있으며 (기계의 기본 4MB를 재정의),이 제한을 초과하면 일반적으로 HTTP 401.1 오류가 발생합니다.
응용 프로그램 수준에서 일반 HTTP 오류를 처리하려면 System.Web 섹션 내에서 Web.Config에서 CustomERROR 섹션을 설정할 수 있습니다.
<system.web>
<customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx />
</system.web>
오류가 표시 될 때마다 사용자가 사용자 정의 오류 페이지로 리디렉션됩니다.
각 오류마다 전문화 된 페이지를 원한다면 다음과 같은 작업을 수행 할 수 있습니다.
<system.web>
<customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx">
<error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>
</system.web>
등등.
또는 가상 디렉토리 속성의 CustomERRORS 탭을 IIS에서 선택한 오류 처리 페이지를 가리킬 수 있습니다.
위의 내용은 401.x 오류에 대해서는 작동하지 않는 것 같습니다. 커스텀 401 페이지로 리디렉션
다른 팁
불행히도, IIS6은 파일의 크기를 볼 수있는 단계에 가지 않을 것이기 때문에 IIS7이 필요하고 사용자 정의 핸들러로 이것을 잡을 것입니다. 업로드가 완료되었거나 오류가 발생했을 때만 크기를 알 수 있습니다.
이것은 ASP.NET에서 알려진 문제입니다. 또 다른 (절름발이) 대안은 요청 초기에 이것을 처리하고 플래시 기반 업 로더를 사용하는 것입니다. John은 아래 링크에서 여러 링크입니다.
업데이트: Jon Galloway는 가지고있는 것 같았습니다 이 문제에 대해 더 깊이 들여다 보았습니다 IIS는 항상 파일을 삼키고 파일이 크다고 말해야하는 것처럼 보이기 때문에 RIA-Uploader가 유일한 현명한 대안 인 것 같습니다.
세르게이,
Johnidol의 답변에 따라 413 상태 코드. 예 :
<customErrors mode="On" defaultRedirect="~/Errors/Error.aspx">
<error statusCode="413" redirect="~/Errors/UploadError.aspx"/>
</customErrors>
클라이언트 프로젝트에서 동일한 문제를 해결해야했기 때문에 이것이 저에게 적합한 솔루션이었습니다. 불행히도 그것은 내가 찾은 유일한 해결책이었습니다 ... 코드 에서이 특정 문제를 포착 할 수 없었습니다. 예를 들어, 게시 된 파일의 길이를 snomag로 확인하거나 Global.asax에서 오류를 포착했습니다. 당신과 마찬가지로, 나는 또한 작업 솔루션을 만들기 전에 이러한 다른 접근법을 시도했습니다. (실제로 나는 문제를 해결할 때 웹에서 어딘가에 이것을 발견했습니다).
도움이되기를 바랍니다.
Global.asax -onerror () 핸들러에서 오류를 포착 할 수 있어야합니다. 그러나 불행히도 초기 요청이 완료되며 사용자에게 오류 알림을 사용하여 동일한 업로드 페이지를 렌더링 할 수 없습니다.
가장 할 수있는 일은 onerror () 핸들러 내부에서 간단한 리디렉션 조항이있는 친숙한 오류 페이지를 표시하는 것입니다. 해당 페이지에 백 링크 또는 유사한 기능이있어 사용자를 첫 번째 오류를 트리거 한 페이지로 반환 할 수 있습니다. 장소.
업데이트:
최근 파일 업로드시 정확한 점검을 구현해야했고 내가 생각해 낸 것은 swfupload 내 요구 사항을 완전히 충족하고 추가 기능이 많이있는 도서관. Steve Sanderson이 제공 한 jQuery 래퍼와 함께 사용했습니다. 자세한 내용은 찾을 수 있습니다 여기.
요점은 플래시가 클라이언트 측의 파일 크기를 감지 하고이 케이스가 충족되면 올바르게 반응 할 수 있다는 것입니다. 그리고 나는 이것이 당신이 필요로하는 것 같아요.
또한 클라이언트에 플래시가 설치되어 있지 않은 경우 기본 업로드 버튼을 우아하게 Degerade하려면 플래시 감지 점검을 구현할 수 있습니다.
큰 업로드를 처리하는 가장 좋은 방법은 파일을 청크로 나누는 httpmodule을 구현하는 솔루션을 사용하는 것입니다. 사전 변경 된 솔루션 중 하나는 파일 크기를 제한 할 수 있어야합니다. 다른 많은 사람들 이이 페이지에있는 사람들에 대한 링크를 게시 했으므로 귀찮게하지 않을 것입니다. 그러나 당신이 당신을 귀찮게하고 싶지 않다면 ~할 수 있다 이를 앱의 Global.asax Application_error 이벤트에서 처리하십시오. 응용 프로그램이 .NET 4.0 인 경우이 코드 블록을 거기에 고정시킵니다.
if (ex.InnerException != null && ex.InnerException.GetType() == typeof(HttpException) && ((HttpException)ex.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
//Handle and redirect here, you can use Server.ClearError() and Response.Redirect("FileTooBig.aspx") or whatever you choose
}
이전 프레임 워크에서 실행중인 경우 여기에서 코드를 사용해보십시오 (VB에 있지만 번역하기 쉽습니다). http://www.webdeveloper.com/forum/showthread.php?t=52132
PostedFile (FileUpload.postedFile.contentLength)의 길이를 확인하여 제한 아래에 있는지 확인하고 필요한 경우 친숙한 오류 메시지를 표시 할 수 있습니다.