我遇到了这样的问题
我使用apache HttpServlet
lib。
FileUpload
当我将此代码测试为简单的Java Web项目并将其部署在Tomcat中时,它可以正常工作。
但是当我在Grails项目中将其部署为servlet时,List<FileItem> items
始终为空。
我很确定这是因为Grails中的某些内容在Servlet
之前使用了请求主体,但我不知道如何强迫Grails不要在我之前使用请求。
我需要将简单的Java servlet添加到grails项目中,因为我需要将一些已编写的Java代码与Grails集成。
这是servlet代码:
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>
我还在Grails中添加了这样的映射到web.xml
:
<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>