Java.io.FileNotFoundException - Erro somente quando esta hospedado

1 resposta
F

Pessoal,

estou desenvolvendo uma aplicacao que roda normal na maquina local, mas quando envio para rodar na net, ele “se perde” no caminho que tem para mim dar download de um determinado arquivo e da o seguinte erro:

..
java.io.FileNotFoundException: /files/documento.pdf (No such file or directory)
	java.io.FileInputStream.open(Native Method)
	java.io.FileInputStream.<init>(FileInputStream.java:106)
	downloads.processa.doGet(processa.java:23)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
..
]

codigo:

..
   <c:forEach var="row" items="${qry.rows}">
                                    <tr>
                                        <td><c:out value="${row.codigo}"/></td>
                                        <td><c:out value="${row.produto}"/></td>
                                        <td><c:out value="${row.relatorio}"/>  </td>
                                        <td><c:out value="${row.data}"/>  </td>
                                        <td>
                                            <a href="<c:url value="envio?">
                                                   <c:param name="arquivo" value="${row.arquivo}"/>
                                                   <c:param name="pathname" value="${row.caminho}" />
                                                    </c:url>">
                                                <img src="images/teste.jpg" /> </a>
                                        </td>
                                         <td>
                                        </td>

                                    </c:forEach>
..

Classe

...
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

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";
        
        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);
...

O caminho dos arquivos estao gravados no meu banco e esta como /files/

Percebi que o problema é porque ele nao esta achando o diretorio ou o arquivo, mas esta tudo certinho com relacao a isso(como disse testei na maquina local) sendo assim na teoria, era só alterar o path, e foi isso que fiz.

Mas o erro continua…

Alguem tem alguma ideia?

valeu pessoal

1 Resposta

andrestrindade

Esse problema é bem comum. Se o servidor for linux as barras são diferentes! Tome cuidado com isso.
Pesquisa aqui no fórum que tem exemplos de como fazer isso. O ideal seria usar fileseparator ao invés da barra.

Criado 25 de maio de 2011
Ultima resposta 25 de mai. de 2011
Respostas 1
Participantes 2