2014-02-24 2 views
0

gwt로 작성된 응용 프로그램과 함께 서버에 이미지를 업로드해야합니다. 작업을 수행하는 서블릿을 만들었습니다. 클라이언트 측에서는 fileupload를 사용하여 요청합니다. 로컬 호스트에서 제대로 작동하지만 내 서버에 응용 프로그램을 배포 할 때 클라이언트는 서브렛을 호출 할 수 없으며 업로드 프로세스의 결과가 없습니다.GWT 파일 업로드가 서버에서 작동하지 않는 이유는 무엇입니까?

나는이 시도했다 :

formPanel.setAction(GWT.getHostPageBaseURL() + "mygym/datiEserciziImgService"+"?idEsercizio="+id); 

이 :

formPanel.setAction(GWT.getModuleBaseURL() + "datiEserciziImgService"+"?idEsercizio="+id); 

하지만 결과

. 여기
<servlet> 
     <servlet-name>datiEserciziImgService</servlet-name> 
     <servlet-class>it.mygym.server.service.exercises.ExercisesServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>datiEserciziImgService</servlet-name> 
     <url-pattern>/mygym/datiEserciziImgService</url-pattern> 
    </servlet-mapping> 

내 서블릿 코드 :

public void doPost(HttpServletRequest req, HttpServletResponse res) { 
    MultipartRequest multi; 
    File img = null; 
    File imgEnd = null; 
    try { 
     multi = new MultipartRequest(req, "."); 
     ExerciseDto dto = new ExerciseDto(); 
     UserDto utente = (UserDto)req.getSession().getAttribute(ISessionConstants.USER_LOGGED_IN); 
     dto.setUserCreated(utente.getId()); 
     dto.setUserLastUpdate(utente.getId()); 
     Integer idEsercizio = Integer.parseInt(multi.getParameter("idEsercizio")); 
     ExerciseServerDto dtoServer = new ExerciseServerDto(); 
     dtoServer.setExercise(dto); 

     img = multi.getFile("startFile"); 
     dtoServer.setImg(img); 
     imgEnd = multi.getFile("endFile"); 
     dtoServer.setImgEnd(imgEnd); 

     _log.error(new StringBuilder("IMMAGINE SERVER estensione").append(img.getName())); 

     res.setContentType("text/html"); 
     String dbKey = (String)req.getSession().getAttribute(ISessionConstants.DB_KEY); 
     ExerciseDelegate delegate = new ExerciseDelegate(dbKey); 

     delegate.saveImage(dtoServer,idEsercizio); 
     res.getOutputStream().print("OK"); 
     res.getOutputStream().flush(); 

    } catch (IOException e1) { 
     _log.error("Errore durante il salvataggio dei dati esercizio", e1); 
     e1.printStackTrace(); 
    } catch (Exception e) { 
     _log.error("Errore durante il salvataggio dei dati esercizio", e); 
     try { 
      res.getOutputStream().print("KO"); 
      res.getOutputStream().flush(); 
     } catch (IOException e1) { 
      _log.error("Errore durante il salvataggio dei dati esercizio", e1); 
      e1.printStackTrace(); 
     } 

    } finally { 
     if (img != null) 
      img.delete(); 
     if(imgEnd != null) 
      imgEnd.delete(); 
    } 
} 

그리고 여기에 내가 가진 오류입니다 :

java.lang.IllegalArgumentException: Not writable: . 
     at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:219) 
     at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:110) 
     at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:90) 
     at it.mygym.server.service.exercises.ExercisesServlet.doPost(ExercisesServlet.java:32) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 

여기

은 web.xml에 매핑입니다 어떻게이 이상한 행동을 피할 수 있습니까?

+0

양식을 제출할 때 브라우저 또는 서버 로그에 오류가 표시됩니까? –

+0

브라우저에 오류가 없으며 catalina.out 파일에 오류가없고 내 서버 로그 파일에 오류가 없습니다. 서블릿의 doPost 메소드에서 로그 파일에 몇 가지 정보를 씁니다. 그러나 양식을 제출할 때 아무 일도 일어나지 않습니다. –

+0

양식이 자동으로 실패 할 수 없습니다. 200 응답을 얻습니까? –

답변

1

코드에 따라 생성자 MultipartRequest (ServletRequest request, String saveDirectory)를 사용하고 있습니다. "." 저장 디렉토리로. 오류 메시지마다 저장 디렉토리에 쓰기가 가능하지 않은 것이 확실합니다. 서버에서 다시 확인하거나 서버의 절대 경로로 바꾸십시오.

관련 문제