Uploadify插件不会调用Java Servlet

我刚开始使用Uploadify flash插件而不是标准的HTML UI。
并遇到了下一个问题:

当我单击“上传文件”链接时,会显示该进度并显示“已完成”状态,但实际上 – 它没有发生任何事情,Java Servlet不会从后端调用。

下一步有上传servlet和上传:

< form enctype="multipart/form-data" method="post" target="uploadFrame" action="/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}">... 

提供Uploadify插件后,UI 现在看起来像:

插件部分(配置):

   ... oScript.text+= "$j('#uploadify').uploadify({"; oScript.text+= "'uploader' : 'kne-portlets/js/lib/uploadify/scripts/uploadify.swf',"; oScript.text+= "'script' : '/uploadFile?portletId=${portletId}&remoteFolder=',"; oScript.text+= "'cancelImg': 'kne-portlets/js/lib/uploadify/cancel.png',"; oScript.text+= "'folder' : '',"; oScript.text+= "'queueID' : 'fileQueue',"; oScript.text+= "'auto' : false,"; oScript.text+= "'multi' : false,"; //oScript.text+= "'sizeLimit' : 1000"; oScript.text+= "});"; oScript.text+= "});"; ...  

‘scripts’参数在这里指向后端的Java Servlet

是文件夹路径,其值为\\ file-srv \ demo

上传部分:

  Upload Files 

我的错在哪里?

插件配置中的“脚本”参数指向后端的Java Servlet并且已完成,但Servlet未被触发。

错误,当’script’参数不正确时: http : //img190.imageshack.us/i/errormm.png/

谢谢你的帮助。

这可能有很多可能的原因(另见我发布的评论)。

  • 外部JS未加载。
  • JS代码在语法/逻辑上无效。
  • 请求url无效。
  • Servlet根本没有映射。
  • Servlet映射到错误的url-pattern
  • Servlet无法启动/初始化。

根据迄今为止给出的信息,很难根除原因。

正如您所提到的那样,您没有在FireBug的“Net”选项卡中看到任何请求被触发,我认为JS代码在语法上/逻辑上都是无效的。 右键单击页面并双重生成/打印JS代码。

更新:我试图重现你的问题。

  1. 我下载了jquery.uploadify-v2.1.0(MIT) ,将其解压缩并将整个内容放在Eclipse中我的(空)playground web项目的/WebContent/uploadify文件夹中。

  2. 我创建了一个/WebContent/upload.jsp文件,如下所示:

        Uploadify test        Upload   
  3. 我在Apache Commons FileUpload的帮助下创建了一个com.example.UploadServlet (只需在/WEB-INF/lib放置commons-fileupload-1.2.1.jarcommons-io-1.4.jar ):

     package com.example; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("UploadServlet invoked. Here are all uploaded files: "); try { List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { System.out.println("Name: " + item.getName()); System.out.println("Size: " + item.getSize()); System.out.println("Type: " + item.getContentType()); } } } catch (Exception e) { throw new ServletException(e); } } } 
  4. 我在web.xml注册了com.example.UploadServlet ,如下所示:

      uploadServlet com.example.UploadServlet   uploadServlet /uploadServlet  
  5. 我部署了项目,启动了服务器,转到http:// localhost:8080 / playground / upload.jsp ,从我的下载文件夹中选择一个随机大文件,点击Upload链接,看上传百分比计数器增长到100%,我终于在stdout中看到以下内容:

     UploadServlet被调用。 以下是所有上传的文件: 
    名称:glassfish-v3-windows.exe
    大小:50402555
    输入:application / octet-stream
    

我很遗憾地说,我无法重现你的问题。 至少,上述信息应该可以帮助您“新鲜”地开始。 希望能帮助到你。

更新:根据注释,filter期望它使用相同的会话。 好的,你可以通过改变来做到这一点

 '<%= request.getContextPath() %>/uploadFile?portletId=${portletId}&remoteFolder=<%= decodedString %>',"; 

 '<%= request.getContextPath() %>/uploadFile;jsessionid=${pageContext.session.id}?portletId=${portletId}&remoteFolder=<%= decodedString %>',"; 

我在uploadify 2.1.4上遇到了完全相同的问题。 我玩了这么长时间才弄清楚它似乎是一个嵌套的URI路径的问题, ie /folder1/folder2/folder3, etc. 。一旦我改变了我的路径使用基本路径(只是/ folder1,或/ uploadServlet,如@BalusC正在使用)SWF文件开始向我的servlet发送数据。