【问题标题】:Why GWT fileupload does not work on server?为什么 GWT 文件上传在服务器上不起作用?
【发布时间】:2014-02-24 17:18:02
【问题描述】:

我必须使用 gwt 编写的应用程序在服务器上上传图像。 我创建了一个 servlet 来完成这项工作。 在客户端,我使用 fileupload 来发出请求。 在本地主机上它工作正常,但是当我在我的服务器上部署应用程序时,客户端无法调用servelet,并且上传过程没有结果。

我试过这个:

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)

如何避免这种奇怪的行为?

【问题讨论】:

  • 您在提交表单时是否在浏览器或服务器日志中看到错误?
  • 浏览器没有错误,catalina.out 文件没有错误,我的服务器日志文件也没有错误。在 servlet 的方法 doPost 中,我在日志文件中写入了一些信息。但是当我提交表单时没有任何反应
  • 表单不能静默失败。你收到 200 响应了吗?
  • 这是我在检查元素后在浏览器控制台中得到的:POST 188.226.139.162:8080/MyGym/mygym/…500 (Internal Server Error)
  • 那么你一定会在你的服务器日志中看到一个错误。

标签: java gwt servlets file-upload


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多