Hi,
I'm trying to make a file upload servlet with Apache Commons Fileupload.
This is the html form:
<form method="post"
enctype="multipart/form-data"
action="../simpleupload">
<input type="text" id="title" value="" />
<input type="file" id="file" />
<input type="submit" id="submit" value="Upload this sucker!" />
</form>
simpleupload is mapped to the servlet in web.xml
The servlet code looks like this:
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// Check that we have a file upload request
boolean isMultipart =
ServletFileUpload.isMultipartContent(req);
if(!isMultipart) {
log.warn("SimpleUploadServlet received a POST request, but it was not " +
"a multipart form. SimpleUploadServlet will exit now.");
return;
}
File targetDir = new File(TARGET_DIR);
DiskFileItemFactory factory = new DiskFileItemFactory(
MAX_MEMORY_SIZE, targetDir);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(MAX_REQUEST_SIZE);
List<FileItem> items = null;
try {
items = (List<FileItem>)upload.parseRequest(req);
}
catch(FileUploadException fue) {
log.error("Failed to upload the file! Exception follows: ", fue);
uploadSuccess = false;
return;
}
/* some more irrelevant stuff here */
}
However, isMultipartContent() never returns true, so the doPost method exits in the first if-test.
If I print out the request headers, I get this:
user-agent: Opera/9.22 (X11; Linux i686; U; en)
host: localhost:8080
accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
accept-language: en-US,en;q=0.9
accept-charset: iso-8859-1, utf-8, utf-16, *;q=0.1
accept-encoding: deflate, gzip, x-gzip, identity, *;q=0
referer: http://localhost:8080/Community/form/simpleupload.html
cookie: JSESSIONID=4C0BF0226D39A76AC6BC052C397AA76E
cookie2: $Version=1
connection: Keep-Alive, TE
te: deflate, gzip, chunked, identity, trailers
content-length: 76
content-type: multipart/form-data; boundary=----------9dhskqaUnWKZ8Bker4wC7L
If I just comment out the isMultipartContent-test, of course I get this exception:
org.apache.commons.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:768)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:323)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:341)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at com.communityr.functionality.action.SimpleUploadServlet.doPost(SimpleUploadServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:63)
at org.jboss.seam.debug.hot.HotDeployFilter.doFilter(HotDeployFilter.java:60)
at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:57)
at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:74)
at org.jboss.seam.web.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:49)
at org.jboss.seam.web.SeamFilter.doFilter(SeamFilter.java:84)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Any idea what I'm doing wrong here?
Regards,
Frode