ASP.NET- 큰 파일을 업로드 할 때 오류 페이지를 표시하는 방법 (최대 요청 길이 초과)?

StackOverflow https://stackoverflow.com/questions/126167

문제

응용 프로그램은 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
    }

원천: http://justinyue.wordpress.com/2010/10/29/handle-the-maximum-request-lexeceed-error-for-asyncfileupload-control/

이전 프레임 워크에서 실행중인 경우 여기에서 코드를 사용해보십시오 (VB에 있지만 번역하기 쉽습니다). http://www.webdeveloper.com/forum/showthread.php?t=52132

PostedFile (FileUpload.postedFile.contentLength)의 길이를 확인하여 제한 아래에 있는지 확인하고 필요한 경우 친숙한 오류 메시지를 표시 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top