允许servlet doPost处理来自struts2中的igUpload的文件上载

时间:2015-01-20 14:56:03

标签: servlets file-upload struts2 infragistics ignite-ui

我在使用Infragistics jQuery igUpload上传文件时遇到问题。他们的控件有一个很好的界面,具有多文件功能和进度条等。我相信这可以工作,但我必须配置错误。

igUpload控件有一个我设置为servlet的uploadURL参数。 (也许这是错误#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

所以我猜这意味着其他东西已经上传了文件。

在这篇文章File upload with ServletFileUpload's parseRequest?中,答案是“这很可能是因为您之前已经解析了请求。这些文件是请求正文的一部分,您只能解析一次。”并且“你是对的。看起来像struts2 fileupload插件已经介入了。”

这似乎是发生在我身上的事情。那么我该如何解决这个问题呢?

  • igUpload控件是否应指向struts操作URL?
  • 应该(可以)以某种方式禁用struts2文件上传插件,以便我的Servlet可以上传吗?
  • 我是否应该使用另一个包来解析或手动执行HttpServletRequest并处理DiskFileItems,因为它们已被指定?

感谢您的任何见解。

0 个答案:

没有答案