2014-02-24 31 views
0

我必须在我的应用程序以gwt写成的服务器上传图像。 我已经创建了一个可以完成这个工作的servlet。 在客户端我使用fileupload来提出请求。 在本地主机上它工作正常,但是当我在我的服务器上部署应用程序时,客户端无法调用servelet,并且我没有从上传过程中得到结果。为什么GWT文件上传在服务器上不起作用?

我已经试过这样:

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

这:

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

,但没有结果。

这里是在web.xml的映射:

<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> 

这里是我的servlet代码:

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) 

我怎样才能避免这种奇怪的行为?

+0

当您提交表单时,您是否在浏览器或服务器日志中看到错误? –

+0

浏览器没有错误,catalina.out文件没有错误,服务器日志文件也没有错误。 在servlet的doPost方法中,我在日志文件中写入一些信息。但是当我提交表单时什么也没有发生 –

+0

表单不能默默失败。你有200回应吗? –

回答

1

根据你的代码,你正在使用构造函数MultipartRequest(ServletRequest request,String saveDirectory),你指定了“。”。作为保存目录。根据错误消息,很明显保存目录不可写。请在服务器上再次检查它,或将其替换为服务器上的任何绝对路径。

相关问题