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
yorgan
Janeiro 28, 2011, 4:59pm
#2
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