如果我使用@MultipartConfig
注释以下servlet,则无法使用Apache common upload
。
@MultipartConfig
public class SendTheFileName extends HttpServlet {
// something
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
moveToSharedDirectory(request,path); // call to upload
}
}
例如:
public boolean moveToSharedDirectory(HttpServletRequest request,String path) {
System.out.println("1. OUTSIDE THE TRY BLOCK OF UPLOAD CLASS");
try {
System.out.println("2. IN THE TRY BLOCK OF UPLOAD CLASS");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("3. AFTER THE BOOLEAN STATEMENT " + isMultipart);
if(!isMultipart) {
// Error:File cannot be uploaded
System.out.println("Message : IS NOT MULTIPART");
} else {
DiskFileItemFactory dfif = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(dfif);
List list = null;
list = fileUpload.parseRequest(request); // returns a list of FileItem instances parsed from the request
Iterator iterator = list.iterator();
System.out.println("4. JUST BEFORE ENTERING THE WHILE LOOP");
System.out.println("5. CHECKING IF THE ITERATION HAS ANY ELEMENT : " + iterator.hasNext());
// ... some more here {-}
}
} // close catch
}
上面代码段中的陈述:
System.out.println("5. CHECKING IF THE ITERATION HAS ANY ELEMENT : " + iterator.hasNext());
打印false
!那是为什么?
如果删除注释,我会true
并且能够上传文件。
对应的HTML:
<form method="post" action="SendTheFileName" enctype="multipart/form-data">
<div id="Files_to_be_shared">
<input type="file" id="File" name="FileTag" />
<input type="submit" value="Share" />
</div>
</form>
注意:出于某种原因,我不得不使用apache commons来上传文件。
答案 0 :(得分:3)
@MultipartConfig
在servlet的multipart/form-data
被调用之前触发Servlet 3.0内置service()
请求正文解析。因此,当它轮到解析请求时,Apache Commons FileUpload将面临一个空的请求体。换句话说,你不能混合它们。将它们混合起来也没有任何意义,因为它们都完全相同。
您有两个选择:
删除@MultipartConfig
并保留Apache Commons FileUpload。
或者,保留@MultipartConfig
并删除Apache Commons FileUpload。