2011-09-13 3 views
0

here으로 GwtUpload 라이브러리의 기본 예제를 구현하려고합니다.GwtUpload Servlet에서 오류가 발생했습니다.

Exception java.lang.ClassCastException: org.apache.commons.fileupload.disk.DiskFileItem cannot be cast to org.apache.commons.fileupload.FileItem

내가 왜 이런 일을 알아낼 수 없습니다 : 내 서버 코드에서

, 나는 다음과 같은 오류가 발생합니다. DiskFileItem은 FileItem의 하위 클래스이며 작동해야합니다. 나는 디버거를 밟아서 두 클래스가 보이는 것처럼 보이지만 할당은 실패했다.

더 이상하게도, 조사 식 창에서 FileItem 메서드를 호출하려고해도 아무런 문제가 없지만 코드에서 액세스하려고하면 오류가 발생합니다.

public class GwtUploadServlet extends UploadAction 
{ 
    private static final long serialVersionUID = 1L; 

    /** 
    * Maintain a list with received files and their content types. 
    */ 
    Hashtable<String, String> receivedContentTypes = new Hashtable<String, String>(); 

    /** 
    * Maintain a list with received files. 
    */ 
    Hashtable<String, File> receivedFiles = new Hashtable<String, File>(); 

    /** 
    * Override executeAction to save the received files in a custom place and 
    * delete this items from session. 
    */ 
    @Override 
    public String executeAction(HttpServletRequest request, 
           List<FileItem> sessionFiles) throws UploadActionException 
    { 
     String response = ""; 
     int cont = 0; 
     for (int i = 0 ; i < sessionFiles.size(); i++) 
     { 
      if (false == sessionFiles.get(i).isFormField()) 
      { 
       cont++; 
       try 
       { 
        ///Create a temporary file placed in the default system 
        // temp folder 
        File file = File.createTempFile("upload-", ".bin"); 
        sessionFiles.get(i).write(file); 

        ///Save a list with the received files 
        receivedFiles.put(sessionFiles.get(i).getFieldName(), file); 
        receivedContentTypes.put(sessionFiles.get(i).getFieldName(), 
              sessionFiles.get(i).getContentType()); 

        ///Send a customized message to the client. 
        response += "File saved as " + file.getAbsolutePath(); 

       } 
       catch (Exception e) 
       { 
        throw new UploadActionException(e); 
       } 
      } 
     } 

     ///Remove files from session because we have a copy of them 
     removeSessionFileItems(request); 

     ///Send your customized message to the client. 
     return response; 
    } 

    /** 
    * Get the content of an uploaded file. 
    */ 
    @Override 
    public void getUploadedFile(HttpServletRequest request, 
      HttpServletResponse response) throws IOException 
    { 
     String fieldName = request.getParameter(PARAM_SHOW); 
     File f = receivedFiles.get(fieldName); 
     if (f != null) 
     { 
      response.setContentType(receivedContentTypes.get(fieldName)); 
      FileInputStream is = new FileInputStream(f); 
      copyFromInputStreamToOutputStream(is, response.getOutputStream()); 
     } 
     else 
     { 
      renderXmlResponse(request, response, ERROR_ITEM_NOT_FOUND); 
     } 
    } 

    /** 
    * Remove a file when the user sends a delete request. 
    */ 
    @Override 
    public void removeItem(HttpServletRequest request, String fieldName) 
      throws UploadActionException 
    { 
     File file = receivedFiles.get(fieldName); 
     receivedFiles.remove(fieldName); 
     receivedContentTypes.remove(fieldName); 
     if (file != null) 
     { 
      file.delete(); 
     } 
    } 
} 

답변

5

당신이 클래스 경로에 공유지 - 파일 업로드의 여러 버전이없는 있는지 확인하십시오 :

여기 내 서블릿 코드입니다.

+0

감사합니다. 그것이 문제였습니다. –

+1

죄송합니다. 나는 너무 빨리 말했다. –

+0

결국 정답이었던 것 같습니다! –

관련 문제