我在使用 Infragistics jQuery igUpload 上传文件时遇到问题。他们的控件有一个很好的界面,具有多文件功能和进度条等。我确信这可以工作,但我必须配置错误。
igUpload 控件有一个uploadURL 参数,我将它设置为一个servlet。(也许这是错误 #1?)发送格式良好的 POST 消息,其中包含要在 multipart/form-data 中上传的预期参数、标题和文件。我的 servlet 获取请求并像这样处理它:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Check that we have a file upload request
if ( ServletFileUpload.isMultipartContent(request) ) {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
for ( FileItem fi : items ) {
String name = fi.getName(); // NEVER executed
}
}
问题是 FileItem 列表总是空的。在 Eclipse 调试中,如果我深入研究请求,我确实看到了 DiskFileItem 对象,所有这些对象都填充了已经上传到的文件
C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\work\Catalina\localhost\MyApp
所以我想这意味着其他东西已经上传了文件。
从这篇文章使用 ServletFileUpload 的 parseRequest 上传文件?答案是“这很可能是因为您之前已经解析过请求。这些文件是请求正文的一部分,您只能解析一次。” 和“你是对的。看起来 struts2 fileupload 插件已经在中间读取了。”
这似乎是发生在我身上的事情。那么我该如何解决呢?
- igUpload 控制是否应该指向一个 struts 操作 URL?
- 我应该(可以)以某种方式禁用 struts2 文件上传插件,以便我的 Servlet 可以进行上传吗?
- 我应该使用另一个包来解析还是手动完成 HttpServletRequest 并处理已经指定的 DiskFileItems?
感谢您的任何见解。