Плагин Uploadify не вызывает Java-сервлет - PullRequest
11 голосов
/ 16 февраля 2010

Я только начал использовать Flashify плагин Uploadify вместо стандартного HTML-интерфейса.
И встретил следующую проблему:

когда я нажимаю ссылку «Загрузить файлы», отображается этот прогресс и отображается состояние «выполнено», но на самом деле - ничего не произошло, сервлет Java не вызывается из бэкэнда.

Загрузка сервлета и загрузка выполняются следующим образом ранее :

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

После предоставления плагина Uploadify пользовательский интерфейс сейчас выглядит следующим образом:

часть плагина (конфигурация):

    <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 на бэкэнде

<%= decodedString %> - путь к папке, значение которого \\ file-srv \ demo

часть для загрузки:

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

Где моя вина?

Параметр «Скрипт» в конфигурации плагина указывает на сервлет Java на бэкенде, и это сделано, но сервлет не запущен.

ошибка, когда параметр 'script' неверен: http://img190.imageshack.us/i/errormm.png/

Спасибо за помощь.

Ответы [ 2 ]

21 голосов
/ 16 февраля 2010

У этого может быть много возможных причин (также см. Комментарии, которые я отправил).

  • Внешний JS не загружен.
  • Код JS синтаксически / логически неверен.
  • Неверный URL-адрес запроса.
  • Сервлет вообще не сопоставлен.
  • Сервлет сопоставлен неправильно url-pattern.
  • Сервлету не удалось запуститься / init.

Трудно определить основную причину, исходя из предоставленной информации.

Как вы упоминали, вы не видели ни одного запроса на вкладке "Сеть".FireBug, я думаю, что код JS просто синтаксически / логически неверен.Щелкните правой кнопкой мыши страницу и дважды подтвердите сгенерированный / напечатанный код JS.

Обновление: Я попытался воспроизвести вашу проблему.

  1. Я скачал jquery.uploadify-v2.1.0 (MIT) , извлек его и поместил все содержимое в папку /WebContent/uploadify моего (пустого) веб-проекта детской площадки в Eclipse.

  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 FileUpload (только что поместил commons-fileupload-1.2.1.jar и commons-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.UploadServlet в web.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 %>',";
0 голосов
/ 19 октября 2011

У меня возникла точно такая же проблема с uploadify 2.1.4. Я поэкспериментировал с этим достаточно долго, чтобы понять, что, похоже, это проблема с вложенным путем URI, i.e. /folder1/folder2/folder3, etc. Как только я изменил свой путь, чтобы использовать базовый путь (просто / folder1 или / uploadServlet, как @BalusC был используя) SWF-файл начал отправлять данные в мой сервлет.

...