2012-07-03 2 views
1

몇 장의 사진을 업로드 할 수있는 응용 프로그램이 있습니다. 난 당신이 업로드하고 싶은 사진을 선택하기 위해 양식 JSP 페이지가 있습니다"file.too.large"오류가 jsp에서 (올바르게) 표시되지 않는 이유는 무엇입니까?

비르 - foto.jsp

... 
<s:form action="SubirFoto" method="post" enctype="multipart/form-data" theme="bootstrap"> 
    <s:file name="foto" label="Foto" /> 
    <s:submit value="Upload" align="center" /> 
</s:form> 
... 

나는이 양식, 사용자 만의 특정 유형을 업로드 할 수 원하는 파일 (예 : jpg, gif ...)을 사용하고 사용자가 2MB보다 큰 크기의 사진을 업로드하도록 허용하지 않습니다.

struts.xml

<action 
     name="SubirFoto" 
     class="impl.redex.presentation.profile.upload.SubirFotosAction"> 
     <interceptor-ref name="fileUpload"> 
      <param name="maximumSize">2097152</param> 
      <param name="allowedTypes"> 
       image/png,image/gif,image/jpeg,image/pjpeg 
      </param> 
     </interceptor-ref> 
     <interceptor-ref name="dentroStack"></interceptor-ref> 
     <result name="success">/WEB-INF/jsps/foto/foto-subida.jsp</result> 
     <result name="input">/WEB-INF/jsps/foto/subir-foto.jsp</result> 
</action> 

파일 업로드 한 가지를 제외하고 완벽하게 작동합니다. 요청 된 요구 사항을 충족하는 사진을 업로드 할 수 있습니다. 사진이 아닌 파일 (예 : 일반 텍스트 파일)을 업로드하려고하면 응용 프로그램에서 global.properties에 정의 된 오류를 JSP 형식의 입력에 넣습니다.

global.properties

struts.messages.error.uploading - No se ha podido subir el fichero 
struts.messages.error.file.too.large - El fichero es demasiado grande. El tamaño máximo es de 2MB. 
struts.messages.error.content.type.not.allowed - Tipo de fichero no aceptado. Sólo es válido si la foto \ 
está en formato jpg/jpeg, gif o png. 

I 2 MB보다 이미지를 더 큰 업로드하려고하면 문제가 온다, 응용 프로그램 비르 - foto.jsp에 저를 리디렉션하지만 어떤을 넣어하지 않습니다 JSP 페이지의 오류.

나는 약간의 실험을하고 난에 <s:actionerror />을 세우면 내가이 나타나는 큰 사진을 업로드 할 때를 비르 - foto.jsp :

the request was rejected because its size (17224595) exceeds the configured maximum (2097152) 

당신이 볼 수 있듯이, 이것은 오류가 아닙니다 그 I global.properties에 정의되어 있습니다.

왜이 두 가지 오류 필드 오류가 아닌가요? 부트 스트랩 플러그인에 문제가 있습니까? 아니면 Struts2의 버그입니까? 내가 뭔가 잘못하고 있는거야? 어떤 도움을 주셔서 감사합니다, 감사합니다.

+0

global.properties가 사용자 지정 i18n 리소스로 등록되어 있습니까? 예를 들어, struts.xml (또는 struts.properties)에 다음과 같이 입력하십시오 :''? –

+0

예, 나는'<일정 \t \t 이름 = "struts.custom.i18n.resources" \t \t 값 = "글로벌"/>' – Pigueiras

답변

5

나는 구글에서 더 많은 검색 나는 오류가 설명 블로그 발견 (블로그 항목은 2008입니다 내가 스트럿에게 2.3.4를 사용하고 있습니다) :

http://blog.bielu.com/2008/09/solution-to-struts2-upload-file-error.html는 내가 해결 방법 요약 내 문제. 문제는 메시지 the request was rejected because its size ...이 Struts2 클래스 중 하나에서 하드 코딩 된 것입니다.

이 문제 (그들 모두가 엉덩이에 통증이있다) 적어도 세 가지 솔루션이 있습니다 하나는 org.apache.struts2.dispatcher.multipart.MultiPartRequest 클래스를 재 구현하는 것입니다; 두 번째는 org.apache.struts2.interceptor.FileUploadInterceptor 클래스를 다시 구현하는 것입니다.

세 번째 파일은 validate 메서드를 FileUpload 클래스에 넣습니다. 내가 검색 사이트로 인해 작동하지 않는 정의 된 메시지가 struts.messages.error.file.too.large을 덮어하라고 또는 왜 모두 오류 서로 다른 오류의 유형 (필드를했다 왜 어쨌든

@Override 
public void validate() { 
    boolean error = false; 

    Collection<?> tmp = getActionErrors(); 

    for (Object o : tmp) { 
     if (o.toString().contains(
       "the request was rejected because its size")) { 

      if (!error) { 
       addFieldError("foto", 
         "El tamaño de la foto es muy grande (Máximo: 2MB)"); 
       error = true; 
      } 
     } 
    } 

} 

, 나는 아직도 이해할 수 없다 행동 오류).

여러분 모두를 위해 감사드립니다.당신의 struts.xml에서 이 증가 : 당신은 당신이 struts.multipart.maxSize

꽤 쉬운 해결책 거기에 지정된 파일 크기보다 더 많은 파일을 업로드하려는 경우

+0

+1 니스 찾기 내 struts.xml에서 라인을 가지고있다. 어떤 해결책도 특히 좋습니다. 예외 메시지를 조치 오류로 전달하는 접근 방식은 국제화 문제를 일으킬 수 있습니다. –

+0

https://issues.apache.org/jira/browse/WW-3177 –

0

첫째,이 오류는 그림으로 온다 struts.multipart.maxSize의 파일 크기 값,

<constant name="struts.multipart.maxSize" value="50777216000" /> 
    <param name="maximumSize">15728640</param> 

보관할 것 매개 변수 이름 = "maximumSize가"값 미만 struts.multipart.maxSize 값, 위의 경우와 같이
, 당신은 사용자 정의 오류가 발생합니다 정의의 struts.multipart.maxSize 값을 초과하지 않는 한 global.properties에서 ed를 실행합니다. struts.multipart.maxSize 값을 일정한 범위로 유지하려고 시도합니다.

관련 문제