2012-12-20 2 views
0

S : file 태그를 사용하여 파일을 업로드하려고하지만 http : // 내부 오류가 발생했습니다. 그러나 동일한 코드에서 파일 이름과 경로를 상수로 직접 지정하면 작동합니다. 따라서 루프 구멍이 어디에서 누락되었는지 확실하지 않습니다.s : file을 사용하여 struts2에서 파일 업로드

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Struts 2 - Login Application | ViralPatel.net</title> 
</head> 

<body> 
<h2>Struts 2 - Login Application</h2> 
<s:actionerror /> 
<s:form action="uploadFile.action" method="post" enctype="multipart/form-data" > 
<s:textfield name="myName"></s:textfield> 
    <s:file name="myFile"></s:file> 
    <s:submit value="Submit" align="center" /> 
</s:form> 
</body> 
</html> 

액션

class FileUploadAction extends ActionSupport implements ServletRequestAware { 
    File userImage; 
    String userImageContentType; 
    String userImageFileName; 
    HttpServletRequest servletRequest; 

    public String execute() { 
     try { 
      String filePath = servletRequest.getSession() 
        .getServletContext().getRealPath("/"); 
      File fileToCreate = new File(filePath, this.userImageFileName); 
      FileUtils.copyFile(this.userImage, fileToCreate); 
     } catch (Exception e) { 
      addActionError(e.getMessage()); 
      return INPUT; 
     } 
     return SUCCESS; 
    } 

    public void setServletRequest(HttpServletRequest servletRequest) { 
     servletRequest = servletRequest; 
    } 
} 

구성

<action name="userImage" class="net.viralpatel.struts2.FileUploadAction"> 
    <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="defaultStack"> 
    </interceptor-ref> 
    <result name="success">SuccessUserImage.jsp</result> 
    <result name="input">UserImage.jsp</result> 
</action> 

편집 : 대신 주석 코드를 게시의 다음 번에 편집 귀하의 게시물 ...

+0

'UploadFile' 작업을 게시하십시오. – Atropo

+0

어떤 예외가 있습니까? –

답변

1

편집 : 조치에 GETTER가있는 private File myFile;이 없습니다.

시작하는 교정 ...


문제가되지 여기, 액션 코드에서 아마.

파일 이름/경로가 포함 된 문자열을 전달하면 작동한다는 것은 무엇을 의미합니까?

액션에 공용 접근 자 (getter 및 setters)가있는 private File myFile;이 있습니까 (파일은 다른 파일이 아닌 java.io.File입니다)?

도이 두 가지 간단한 튜토리얼을 살펴보십시오 다음 defaultStack 이미 fileUpload 인터셉터를 포함하기 때문에

http://viralpatel.net/blogs/struts-2-file-upload-save-tutorial-with-example/

http://www.roseindia.net/struts/struts2/struts-2-file-upload.shtml

+1

이것은 대답보다 더 많은 코멘트 일 것입니다. –

+0

그래도 꽤 긴 코멘트 :/ –

+0

jsp 파일에서 enctype = "multipart/form-data"를 사용하면 HTTP 500 내부 오류가 발생하고 사용하지 않으면 HTTP 404 예외가 발생합니다. – user1917911

0

당신은 당신의 행동 인터셉터 스택에 두 번 fileUpload 인터셉터를 가하고 있습니다. 당신은 그런 식으로 스택 내부의 인터셉터를 구성 할 수 있습니다

<action ...> 
    <interceptor-ref name="defaultStack"> 
    <param name="fileUpload.allowedTypes"> 
     image/png,image/gif,image/jpeg,image/pjpeg 
    </param> 
    </interceptor-ref> 
    <result ... /> 
</action> 

는 또한 액션 클래스 내부 사용자 변수에 대한 대중의 getter/setter를 가지고 있는지 확인하십시오.

관련 문제