Подтвердить что ты не робот

Загрузить плагин не вызывает Java Servlet

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

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

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

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

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

для загрузки:

<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/

Благодарим вас за помощь.

4b9b3361

Ответ 1

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

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

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

Как вы уже упоминали, вы не видели, что какой-либо запрос был запущен на вкладке "Net" FireBug, я думаю, что JS-код просто синтаксически/логически недействителен. Rightclick страницу и двойной вариант сгенерированного/напечатанного JS-кода.

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

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

  • Я создал файл /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>
    
  • Я создал 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);
            }
        }
    }
    
  • Я зарегистрировал 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>
    
  • Я развернул проект, запустил сервер, перешел в 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 %>',";

Ответ 2

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