Download de um arquivo do servidor

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

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]

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?

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

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

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.

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

Acrescentei essas linhas:

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

é isso mesmo? não fuincionou…

[quote=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"); 

[/quote]

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

Eu fiz rotina de download via servlet, toma ai:

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

 if (in != null) {
    response.reset();					 
    response.setContentType(&quot;application/x-msdownload&quot;);
    String s = &quot;attachment; filename=&quot; + t_file.getName();
    response.setHeader(&quot;Content-Disposition&quot;, 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

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

[code]<%@ 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();
}
%>

[/code]

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

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.

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

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

Francisco Rodrigues

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:

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

[quote=francisco.rodrigues] Eu fiz rotina de download via servlet, toma ai:

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

 if (in != null) {
    response.reset();					 
    response.setContentType(&quot;application/x-msdownload&quot;);
    String s = &quot;attachment; filename=&quot; + t_file.getName();
    response.setHeader(&quot;Content-Disposition&quot;, 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[/quote]

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/