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

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

有上传 servlet 和下一步执行上传 早些时候:

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

提供Uploadify插件后,UI 现在 好像:

插件部分(配置):

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

这里的“scripts”参数指向后端的Java Servlet

<%= decodedString %> 是文件夹路径,其值为 \\文件-srv\演示

上传部分:

<input type="file" name="uploadify" id="uploadify" />
<a href="javascript:$j('#uploadify').uploadifyUpload();">Upload Files</a>

我的错在哪里?

插件配置中的“Script”参数指向后端的 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(麻省理工学院), ,提取它并将整个内容放入 /WebContent/uploadify Eclipse 中我的(空)playground Web 项目的文件夹。

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

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Uploadify test</title>
            <script src="uploadify/jquery-1.3.2.min.js"></script>
            <script src="uploadify/swfobject.js"></script>
            <script src="uploadify/jquery.uploadify.v2.1.0.min.js"></script>
            <script type="text/javascript">
                $(document).ready(function() {
                    $('#uploadify').uploadify({
                        'uploader': 'uploadify/uploadify.swf',
                        'script': 'uploadServlet',
                        'folder': '/uploads',
                        'cancelImg': 'uploadify/cancel.png'
                    });
                    $('#upload').click(function() {
                        $('#uploadify').uploadifyUpload();
                        return false;
                    });
                });
            </script>
        </head>
        <body>
            <input id="uploadify" type="file">
            <a id="upload" href="#">Upload</a>
        </body>
    </html>
    
  3. 我创建了一个 com.example.UploadServlet 如下,几乎没有帮助 Apache Commons 文件上传 (刚刚放置 commons-fileupload-1.2.1.jarcommons-io-1.4.jar/WEB-INF/lib):

    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<FileItem> 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. 我注册了 com.example.UploadServletweb.xml 如下:

    <servlet>
        <servlet-name>uploadServlet</servlet-name>
        <servlet-class>com.example.UploadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>uploadServlet</servlet-name>
        <url-pattern>/uploadServlet</url-pattern>        
    </servlet-mapping>
    
  5. 我部署了项目,启动了服务器,去了 http://localhost:8080/playground/upload.jsp, ,从我的下载文件夹中随机选择一个大文件,单击 Upload 链接,看到上传百分比计数器增长到 100%,我终于在标准输出中看到以下内容:

    UploadServlet invoked. Here are all uploaded files: 
    Name: glassfish-v3-windows.exe
    Size: 50402555
    Type: application/octet-stream
    

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

更新: 根据评论,过滤器期望它使用相同的会话。好的,你可以通过改变来相当容易地做到这一点

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

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

其他提示

我具有uploadify 2.1.4完全相同的问题。我这个打足够长的时间来弄清楚,它似乎只要我改变了我的使用基本路径路径是一个嵌套的URI路径,i.e. /folder1/folder2/folder3, etc.问题(只/资料夹,或/ uploadServlet像@BalusC使用) SWF文件开始将数据发送到我的servlet。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top