3

私はそのような問題に遭遇しました

私はHttpServletJavaでapachelibを実装しましたFileUpload

このコードを単純なJavaWebプロジェクトとしてテストし、Tomcatにデプロイすると、機能します。しかし、これをGrailsプロジェクトのサーブレットとしてデプロイすると、List<FileItem> items常に空になります。

これは、Grailsの何かが、リクエストを実行する前にリクエストボディを消費しているためだと確信していますが、Grailsが自分の前でリクエストServletを消費しないように強制する方法がわかりません。

すでに記述されているJavaコードをGrailsと統合する必要があるため、プレーンなJavaサーブレットをgrailsプロジェクトに追加する必要があります。

サーブレットコードは次のとおりです。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<FileItem> items = new ServletFileUpload(
                new DiskFileItemFactory()).parseRequest(request);
        for (FileItem item : items) {
            if (item.isFormField()) {
                String fieldname = item.getFieldName();
                String fieldvalue = item.getString();
                System.out.println(fieldname + "=" + fieldvalue);
            } else {
                String fieldname = item.getFieldName();
                String filename = FilenameUtils.getName(item.getName());
                InputStream filecontent = item.getInputStream();
                String value = IOUtils.toString(filecontent);
                System.out.println(fieldname + "=" + value);
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }
}

リクエストの本文を読み取り、sysoutに出力するだけです。

今私はフォームを持っています:

<html>
 <body>
   <form action="http://localhost:8080/Tst/photoServlet" method="post" enctype="multipart/form-data">
     <input type="text" name="fieldId" value="field_photo"/>
     <input type="file" name="Afile" />
     <input type="submit" />
   </form>
 </body>
</html>

web.xmlGrailsにそのようなマッピングも追加しました:

<servlet>
    <servlet-name>photoServlet</servlet-name>
    <servlet-class>com.tst.PhotoUploadServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>photoServlet</servlet-name>
    <url-pattern>/ws/photoUpload</url-pattern>
</servlet-mapping>
4

0 に答える 0