Pergunta

Comecei a usar o upload do upload Flash em vez do interface do usuário HTML padrão.
E encontrou o próximo problema:

Quando clico em link "Upload de arquivos", esse progresso é mostrado e o status "concluído" é aparecido, mas, na realidade - não aconteceu nada, o Java Servlet não é chamado do back -end.

Há upload servlet e upload executado na próxima maneira mais cedo:

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

Depois de fornecer o plug -in do upload, a interface do usuário agora parece:

peça do plug -in (configuração):

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

O parâmetro 'scripts' aqui aponta para o java servlet no back -end

<%= decodedString %> é o caminho da pasta, qual valor é file-srv Demo

parte para fazer upload:

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

Onde está minha culpa?

Param 'script' no plug -in Config Points para o java servlet no back -end e está feito, mas o servlet não é acionado.

Erro, quando o param 'script' não está correto:http://img190.imageshack.us/i/errormm.png/

Obrigado pela assistência.

Foi útil?

Solução

Isso pode ter muitas causas possíveis (veja também os comentários que publiquei).

  • JS externo não está carregado.
  • O código JS é sintaticamente/logicamente inválido.
  • O URL de solicitação é inválido.
  • Servlet não é mapeado.
  • Servlet está mapeado em errado url-pattern.
  • O Servlet não conseguiu iniciar/init.

É difícil pregar a causa raiz com base nas informações de distância.

Como você mencionou que não viu nenhuma solicitação na guia "Net" do Firebug, acho que o código JS é simplesmente sintaticamente/logicamente inválido. Página do clique com a direita e o código JS gerado/impresso duplo.

Atualizar: Eu tentei reproduzir seu problema.

  1. Eu baixei jQuery.uploadify-v2.1.0 (MIT), extraiu e colocou todo o conteúdo no /WebContent/uploadify Pasta do meu projeto da web de playground (vazio) no eclipse.

  2. Eu criei um /WebContent/upload.jsp Arquivo o seguinte:

    <!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. Eu criei um com.example.UploadServlet o seguinte com pouca ajuda de Apache Commons FileUpload (apenas colocado commons-fileupload-1.2.1.jar e commons-io-1.4.jar dentro /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. eu registrei com.example.UploadServlet dentro web.xml do seguinte modo:

    <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. Eu implantei o projeto, iniciei o servidor, fui para http: // localhost: 8080/playground/upload.jsp, selecionado um arquivo grande aleatório da minha pasta de downloads, clicou no Upload Link, veja o contador percentual de upload crescendo para 100% e finalmente vejo o seguinte no stdout:

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

Lamento dizer que não posso reproduzir seu problema. Pelo menos, as informações acima devem ajudá -lo a começar "recentemente". Espero que ajude.

Atualizar: De acordo com os comentários, o filtro espera que esteja usando a mesma sessão. Ok, você pode fazer isso bastante fácil mudando

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

para

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

Outras dicas

Eu estava tendo exatamente o mesmo problema com o upload de 2.1.4. Eu brinquei com tanto tempo suficiente para descobrir que parece ser um problema com um caminho de Uri aninhado, i.e. /folder1/folder2/folder3, etc. Assim que eu mudei meu caminho para usar o caminho base (apenas /pasta1, ou /uploadServlet como @balusc estava usando), o arquivo SWF começou a enviar dados para o meu servlet.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top