Вопрос

я только начал использовать Uploadify flash plugin вместо стандартного HTML UI.
И столкнулся со следующей проблемой:

когда я нажимаю ссылку "Загрузить файлы", отображается этот прогресс и отображается статус "завершено", но на самом деле - ничего не произошло, 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 %> является путем к папке, значение которого равно \\файл-srv\демо

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

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

В чем моя вина?

Параметр 'Script' в конфигурации плагина указывает на Java-сервлет на серверной части, и это выполнено, но сервлет не запускается.

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

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

Это было полезно?

Решение

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

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

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

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

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

  1. Я скачал jquery.uploadify-версия 1.0 (MIT), извлек его и поместил все содержимое в /WebContent/uploadify папка моего (пустого) веб-проекта playground в 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 на всеобщее обозрение (только что размещенный 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 %>',";

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top