Pathname - area de download

Ola pessoal, blz?

Estou desenvolvendo uma area no site que vai servir para dar download de algum arquivo.

O codigo esta ok na minha maquina, mas quando mandei para o servidor na net, ele disse que nao encontra o arquivo para baixar.

Analisando o codigo, percebi que o erro esta nesta linha:

<a href="envio?arquivo=Documento.pdf&pathname=/files/"> Download: </a> Documento.pdf

Na minha maquina local esta assim:

<a href="envio?arquivo=Documento.pdf&pathname=c:/teste/web/files/">

E funciona normal…Ja tirei o c:/ e fiz outros testes, mas nao funciona…

Voces sabe como contornar isso?

valeuu

No servidor você deve estar usando linux, certo?
Então você tem que passar o caminho absoluto do arquivo, que deve ser algo como /opt/servidor/projeto/arquivo.ext
O mais fácil é olhar o caminho no seu cliente FTP.

[]'s
Daniel

O Caminho esta correto no path?

Nao deu certo. Entao, esse é o trecho que ele pega o caminho:

 <a href="<c:url value="envio?">
                                                   <c:param name="arquivo" value="${row.arquivo}"/>
                                                   <c:param name="pathname" value="${row.caminho}" />
                                                    </c:url>">
 <body>
        <center><h1> Lista de Arquivos para Download</h1></center>
        <hr><hr>
        <a href="envio?arquivo=Documento.pdf&pathname=/files">
            Download:
        </a>
        Documento.pdf
        <br>
        <a href="envio?arquivo=imagemGif.gif&pathname=/teste/web/files/">
            Download:
        </a>
        Imagem.gif
         
    </body>

Classe que trata os arquivos



public class processa extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String arquivo = request.getParameter("arquivo");
        String pathname = request.getParameter("pathname");
   
        ServletOutputStream out = response.getOutputStream();
        File file = new File(pathname + arquivo);
        FileInputStream in = new FileInputStream(file);

        String mime = "application/octet-stream";
        String testname = arquivo.toUpperCase();
        if(testname.endsWith(".JPEG")) 
            mime = "image/jpeg";
         else if(testname.endsWith(".JPG")) 
            mime = "image/jpg";
         else if(testname.endsWith(".PDF")) 
            mime = "application/pdf";
         else if(testname.endsWith(".PPT"))
            mime = "application/ppt";
         else if(testname.endsWith(".PPS"))
            mime = "application/pps";
         else if(testname.endsWith(".ZIP")) 
            mime = "application/zip";
         else if(testname.endsWith(".MPG")) 
            mime = "video/mpeg";
         else if(testname.endsWith(".txt")) 
            mime = "application/txt";
         else if(testname.endsWith(".GIF")) 
            mime = "image/gif";
        
        response.setContentType(mime);
        response.addHeader("content-disposition",
                "attachment; filename=" + arquivo);
        response.setContentLength((int)file.length());

        int octet;
        while ((octet = in.read()) != -1) 
            out.write(octet);
        
        in.close();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);

    }
}

Como eu disse, na minha maquina local, deu certo, mas quando mandei para o site e clico para dar download…ele diz que nao encontra os arquivos

Alguem tem alguma ideia?

Coloca o stacktrace para dar uma olhada…

O caminho muda sempre, se nao mudar sempre passe atraves do link somente o nome do arquivos e na classe ou arquivos de destino coloque o caminho absoluto.

O caminho absoluto no caso de hospedagens sempre é algo parcecido com: /home/seu-usuario/public_html ou www ou httdocs.

qq coisa posta ai