12

OnError에서 오류를 기록 할 수있는 응용 프로그램이지만 사용자에게 의미있는 것을 보여주기 위해 리디렉션을 수행 할 수 없습니다. 아이디어가 있으십니까? web.config에서 maxRequestLength를 설정할 수 있지만 어쨌든 사용자는이 제한을 초과 할 수 있으며 일부 정상적인 오류를 표시해야한다고 알고 있습니다.ASP.NET - 큰 파일을 업로드 할 때 오류 페이지 표시 방법 (최대 요청 길이 초과)?

답변

6

web.config에서 maxRequestLength를 설정하고 (machine.config의 기본 4MB를 무시)이 제한을 초과하면 대개 HTTP 401.1 오류가 발생합니다.

<system.web> 
    <customErrors mode=On defaultRedirect=yourCustomErrorPage.aspx /> 
</system.web> 

매번 오류가 보여 한 사용자가 리디렉션됩니다 : 당신은 설치가 system.web 섹션 내에 귀하의 Web.config의 인 CustomError 섹션이 있습니다 응용 프로그램 수준에서 일반적인 HTTP 오류를 처리하기 위해

맞춤 오류 페이지로 이동하십시오.

당신은 같은 것을 할 수있는 각 오류에 대한 전문 페이지하려면 다음 등

<system.web>  
    <customErrors mode="On" defaultRedirect="yourCustomErrorPage.aspx"> 
    <error statusCode="404" redirect="PageNotFound.aspx" /> 
    </customErrors> 
</system.web> 

그리고있다.

또는 IIS에서 가상 디렉터리 속성의 CustomErrors 탭을 편집하여 선택한 오류 처리 페이지를 가리킬 수 있습니다. 위의

는 401.x 오류 작동하지 않는 것 -이 코드 프로젝트 문서는 매우 비슷한 문제가 될 것으로 보인다 무엇에 대한 해결 방법을 설명합니다 Redirecting to custom 401 page

+0

고마워요, 이것은 오류 처리에 대한 완전한 가이드입니다. XML과 똑같은 결과가 나옵니다. 그러나 요청 길이를 초과하는 경우에는 도움이되지 않습니다. – st78

+0

마지막 편집 내용을보고 무언가를 생각해 내면 알려주세요 – JohnIdol

+0

이 페이지에서 제공되는 maxRequestLength 설정 방법을 모르면 다음 링크를 클릭하십시오. [MSDN] (http://msdn.microsoft.com/en-us/) library/e1f13641.aspx) –

-1

게시 된 파일의 길이 (FileUpload.PostedFile.ContentLength)를 확인하여 제한된 파일인지 여부를 확인하고 필요한 경우 친숙한 오류 메시지를 표시 할 수 있습니다.

+0

작동하지 않습니다 - asp.net이 시점에 도달 할 수 없습니다. – st78

+0

좋아요, 그건 저에게 새로운 것입니다. 먼저 파일 업로드/거부를 ​​결정하는 것보다 콘텐츠 길이를 확인할 수 있다고 생각했습니다. –

+0

정보를 제공해 주셔서 감사합니다. 방금 체크 아웃했는데 실패합니다. 이전에 사용 했으므로 알아두면 좋은 점과 그 문제가 있다는 것을 깨닫지 못했습니다. –

0

Global.asax - OnError() 처리기에서 오류를 catch 할 수 있어야합니다. 하지만 불행히도 귀하의 초기 요청이 완료되며 일부 오류 통지와 함께 동일한 업로드 페이지를 렌더링 할 수 없습니다.

가장 많이 할 수있는 일은 OnError() 처리기 내에서 간단한 리디렉션 절이 포함 된 친숙한 오류 페이지를 표시하고 해당 페이지에서 사용자가 페이지를 트리거 한 페이지로 돌아갈 수있는 뒤로 링크 또는 유사한 기능을 제공하는 것입니다 처음에는 오류.

업데이트 :

나는 최근 파일 업로드시 정확한 검사를 구현했고, 내가 생각 해낸 것은 전적으로 내 요구 사항을 충족 SWFUpload 라이브러리이며, 또한 추가 기능을 많이 가지고

. Steve Sanderson이 제공하는 jquery 래퍼와 함께 사용했습니다. 자세한 내용은 here을 참조하십시오.

중요한 점은 플래시가 클라이언트 측에서 파일 크기를 감지하고이 경우 충족되면 적절히 반응 할 수 있다는 것입니다. 그리고 나는 이것이 당신이 필요로하는 것과 정확히 같다고 봅니다.

더 나아가 클라이언트에 플래시가 설치되어 있지 않은 경우 기본 업로드 버튼 0으로 정상적으로 감축하려는 경우 플래시 감지 확인을 구현할 수 있습니다.

+0

사실, OnError에서 예외를 catch 할 수 있지만 Response.Redirect()는 아무 것도하지 않습니다. – st78

1

불행히도 IIS7을 필요로하고 IIS6이 파일 크기를 볼 수있는 단계에 도달하지 않기 때문에 사용자 지정 처리기로이를 catch 할 수 있습니다. 업로드가 완료되거나 오류가 발생했을 때만 크기를 알 수 있습니다.

이것은 ASP.NET의 알려진 문제입니다. 또 다른 (절름발이) 대안은 요청에서 이전에이 문제를 처리하고 플래시 기반 업 로더를 사용하는 것입니다. John은 링크 아래 몇 개의 링크로 연결됩니다.

업데이트 : 존 갤러 웨이는 looked deeper into this problem이 듯 IIS는 항상 파일을 삼키는 후 대형에 있다고 당신에게 갖고있는 것 같아요 때문에 RIA-업 로더는, 유일한 합리적인 대안처럼 보인다.

+0

우리 서버는 IIS7을 실행하며,이 문제를 극복하는 방법에 대한 답변을 찾을 수있는 링크/키워드를 제공 할 수 있습니까? – st78

1

세르게이,

당 JohnIdol의 대답을 얻으려면 상태 코드에 대한 맞춤 오류 페이지를 설정해야합니다. 예컨대 :

<customErrors mode="On" defaultRedirect="~/Errors/Error.aspx"> 
        <error statusCode="413" redirect="~/Errors/UploadError.aspx"/> 
    </customErrors> 

나는 클라이언트 프로젝트에서 같은 문제를 해결했다, 이것은 나를 위해 일한 솔루션 이었기 때문에 나는 알고있다. 불행히도 그것은 내가 발견 한 유일한 해결책이었습니다 ... 코드에서이 특별한 문제를 잡는 것은 불가능했습니다. 예를 들어 snomag가 제안한 것처럼 게시 된 파일의 길이를 확인하거나 global.asax에서 오류를 포착합니다. 당신과 마찬가지로, 나는 또한 다른 해결책을 생각해 내기 전에 이러한 다른 접근법을 시도해 보았습니다. (사실 나는 결국 웹에서 어딘가에서이 문제를 발견했다.)

희망이 있습니다.

+1

이상한 '최대 요청 길이 초과'오류 500이 발생합니다. –

0

대용량 업로드를 처리하는 가장 좋은 방법은 파일을 청크로 분해 할 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-length-exceeded-error-for-asyncfileupload-control/

, 여기 (가 VB에서,하지만 코드를 시도 그것은 쉽게 번역 할 수 있습니다) : http://www.webdeveloper.com/forum/showthread.php?t=52132

관련 문제