Download de um arquivo do servidor

16 respostas
P

pessoal, eu ja tenho um arquivo no servidor, na pasta: …/webapps/nome_aplicacao/temp/arquivo.csv

Como eu faço para fazer o download desse arquivo para o usuario???

16 Respostas

R

Bom quem tem que fazer o download é os usuário. :stuck_out_tongue:

Se o arquivo está dentro do contexto da aplicação, ou seja, dentro do .war, você pode fazer um link do tipo:

<a href IGUAL "linkproarquivo">arquivo</a>

No seu jsp. :thumbup:

[edit]Obs.: Não pude escrever o HTML, pois o Forum vai tentar interpretar o HTML [/edit]

P

Eu tentei fazer isso, mas como o arquivo é tipo texto, ele abre no browser.

Tem como tornar possível o usuário baixar o arquivo (através do JSP) como um download normal?

R

Bom, você deve configurar isso no servidor de aplicações ou no Apache, MIME TYPES, que servidor você está utilizando?

P

eu uso o Apache Tomcat… era isso q vc tava perguntando???

R

Era isso mesmo.

Então entre na pasta conf do seu tomcat, exemplo: C:\apache-tomcat-5.5.17\conf, verifique o arquivo web.xml, você deve inserir umas linhas aí que dizem que o CSV é do tipo x-application. Dê uma olhada netse arquivo.

B

alem do que o pessoal falou acima voce pode escrever um servlet que le o arquivo eo envia para o usuario, é só setar o content-type do documento como exemplo abaixo:

response.setContentType("application/x-msdownload");
P

Acrescentei essas linhas:

<mime-mapping>
        <extension>csv</extension>
    <mime-type>application/x-application</mime-type>

é isso mesmo? não fuincionou…

P

benflodin:
alem do que o pessoal falou acima voce pode escrever um servlet que le o arquivo eo envia para o usuario, é só setar o content-type do documento como exemplo abaixo:

response.setContentType("application/x-msdownload");

Você poderia me dar um exemplo???
E como meu jsp vai chamar essa servlet?
:slight_smile:

F

Eu fiz rotina de download via servlet, toma ai:

File t_file = new java.io.File(request.getRealPath("") + "/temp/arquivo.csv ");
 long fileSize = t_file.length();
 InputStream in = new FileInputStream(t_file);

 if (in != null) {
    response.reset();					 
    response.setContentType("application/x-msdownload");
    String s = "attachment; filename=" + t_file.getName();
    response.setHeader("Content-Disposition", s);
    response.setContentLength((int) fileSize);
    byte[] b = new byte[2048];
    int len = 0;
    while ((len = in.read(b)) &gt; 0)
    {
	response.getOutputStream().write(b, 0, len);
    }
    in.close();
 }

Francisco Rodrigues

P

Vou postar aqui o fonta do meu servlet inteirinho!
Fiz igual vc colocou pra mim, mas mesmo assim abriu no browser...

<%@ page import="java.io.*"%>

<%
  File t_file = new java.io.File(request.getRealPath("") + "/temp/Relatorio.csv ");
  long fileSize = t_file.length();
  InputStream in = new FileInputStream(t_file);

  if (in != null){
     response.reset();					 
     response.setContentType("application/x-msdownload");
     String s = "attachment; filename=" + t_file.getName();
     response.setHeader("Content-Disposition", s);
     response.setContentLength((int) fileSize);
     byte[] b = new byte[2048];
     int len = 0;
     while ((len = in.read(b)) > 0)
     {
 	response.getOutputStream().write(b, 0, len);
     }
     in.close();
  }
%>

<html>
<head>
</head>
<body>
</body>
</html>

O que eu estou fazendo de errado??? :(

R

Acredita em mim. Você tem que configurar o web.xml do seu TOMCAT! :twisted:

Mesmo que você faça no JSP tem que configurar para ele entender que você não quer que o BROWSER interprete o arquivo. Do jeito que você estava fazendo antes também está certo, pode gerar o arquivo e colocar um link! Porém você deve configurar o web.xml se quiser que o arquivo seja disponibilizado para download.

Por exeplo altere a o arquivo para .zip, e coloque uma referencia para este arquivo, ele não vai abrir no browser, ele vai abrir a caixa de download.

E

so pra constar, deposi que vc configurou o xml do tomcat vc reiniciou ele neh?!

F

Isso não é a servlet, e sim a jsp. Tenta criar uma servlet e chamar via a sua jsp.

Francisco Rodrigues

P

Deu certo!
Como eu quero salvar um csv (que vai ser aberto pelo excel), eu copiei a configuração da extensão do xls lá no web.xml e alterei para csv!
Ah! Eu reiniciei o tomcat sim, viu?

<mime-mapping> <extension>csv</extension> <mime-type>application/vnd.ms-excel</mime-type> </mime-mapping>

Pessoal! Muito obrigada por toda a atenção que vcs me deram! Eu não teria conseguido sem essa ajuda!!! Muito obrigada mesmo!!! :slight_smile:

F

Oi Francisco, implementei teu exemplo, faço o downlodad do arquivo, mais quando eu abro ele ta colocando o conteudo de minha pagina jsp dentro do arquivo. Como posso resolver isso ?

Antecipadamente obrigado pela ajuda,
Fabio Botelho

francisco.rodrigues:
Eu fiz rotina de download via servlet, toma ai:

File t_file = new java.io.File(request.getRealPath("") + "/temp/arquivo.csv ");
 long fileSize = t_file.length();
 InputStream in = new FileInputStream(t_file);

 if (in != null) {
    response.reset();					 
    response.setContentType("application/x-msdownload");
    String s = "attachment; filename=" + t_file.getName();
    response.setHeader("Content-Disposition", s);
    response.setContentLength((int) fileSize);
    byte[] b = new byte[2048];
    int len = 0;
    while ((len = in.read(b)) &gt; 0)
    {
	response.getOutputStream().write(b, 0, len);
    }
    in.close();
 }

Francisco Rodrigues

D

fiz uma implementação e um post sobre isso tem exemplo la do projeto para baixar

http://brunodanielmarinho.wordpress.com/2011/08/26/download-de-arquivos-do-servidor/

Criado 26 de julho de 2006
Ultima resposta 26 de ago. de 2011
Respostas 16
Participantes 7