Dowload de arquivos

12 respostas
andre.hebeler

Olá,

No meu projeto/portal fiz uma JSP na qual o usuário faz um upload de qualquer arquivo (Sistema de OS) para o servidor da empresa ! essa parte ta redondo !!!
Agora estou tentando fazer o inverso ! quero um link na minha JSP na qual o usuário possa pegar este arquivo.
Procurei na internet mais não achei muita coisa em q me inspirar !!! heheheheee … alguém aqui do fórum já fez algo do tipo e teria algum material para eu estudar ou exemplos similares ???

Agradeço desde já a atenção !!!

Att,
André Hebeler.

12 Respostas

alves.Felipe

eu fiz um esquema desse, mas eu gravo os arquivos num projeto web…
ai eu faço um link com o nome dos arquivos…e abre…hehe

andre.hebeler

Certo !

mais aqui na empresa eles querem gravados no servidor ! para fins de histórico e tals !!!
teria q baixar do servidor mesmo !!!

mais valeu mesmo assim !!! :slight_smile:

rafaelsantini
Para esse tipo de problema, implementei um Servlet que recebe como parâmetro o nome do arquivo que está no servidor. Segue um trecho do código:
String pasta = ConfiguracaoFachada.pastaDosArquivos(getServletContext(), request);
        String arquivo = request.getParameter("arquivo");
        String caminho = pasta + System.getProperty("file.separator") + arquivo;
        
        File file = new File(caminho);
        InputStream in = new FileInputStream(file);

        try {

            response.setContentType(null);
            response.setContentLength((int)file.length());
            response.addHeader("Content-Disposition", "attachment; filename=" + "\"" + file.getName() + "\"");

            ServletOutputStream outputStream = response.getOutputStream();
            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) > 0) {
                outputStream.write(buffer);
            }

            outputStream.flush();
            outputStream.close();

        } finally {
            in.close();
        }
andre.hebeler

Cara … só não to sabendo como eu implemento esse código para a minha solução !

eu teria tipo um link q chamasse essa servlet ?!

String pasta = ConfiguracaoFachada.pastaDosArquivos(getServletContext(), request);   
String arquivo = request.getParameter("arquivo");   
String caminho = pasta + System.getProperty("file.separator") + arquivo;

esse trecho ! aonde iria as minhas configurações ???

abraço !

rafaelsantini

Sim, você teria um link para o servlet. Exemplo:

http://servidor/aplicacao/servlet/ArquivoServlet?arquivo=documento001.pdf

Com a seguinte linha você recupera o nome do arquivo passado como parâmetro ao servlet:

String arquivo = request.getParameter("arquivo");
andre.hebeler

Pesquisando na web ! achei alguns c/ o mesmo problema q eu !

e resolveram apenas c/ um link que levava ao caminho onde o arquivo está salvo no servidor !!!

estou tentando implementar dessa forma para testes !

se funcionar eu posto aqui a solução ! se não … eu tendo fazer desta forma !!!

Obrigado ! abraço !!!

andre.hebeler

Olá !

Consegui faze c/ link !!!

Só q meu problema agora é que ele abre o arquivo no próprio navegador !!!
Gostaria q ele me desse aquela janela de “Salvar como …”

Estou pesquisando ! mais até agora sem sucesso !!!

se alguém puder me ajudar ! ficaria grato !!!

rafaelsantini

Para forçar o download do arquivo (Salvar como…), utilizo o seguinte código:

response.addHeader("Content-Disposition", "attachment; filename=" + "\"" + file.getName() + "\"");

A propriedade attachment que força o download.

andre.hebeler

Então … mais aonde eu implemento esse código ???

na minha JSP ta assim :

<tr>
                <td colspan="2" class="tituloMaior" align="right" noWrap>Arquivo em anexo :</td>
                <td colspan="2" align="left">
	                <% String anexo = "../../anexos/" + rs.getString("id_anexo") + "/" + rs.getString("NOME");%>
		<a >&lt;%=(rs.getString("NOME"))%&gt;</a>					
                &lt;/td&gt;
&lt;/tr&gt;

Grato !!!

rafaelsantini

Hmmm… pelo que entendi, você está fazendo o upload dos arquivos para uma pasta da sua aplicação? Então, na sua página, você apenas monta o link para o arquivo que será atendido pelo servidor web (Tomcat)? Se for assim, você não conseguirá aplicar o código que lhe passei. A solução que propus é implementar um servlet para ler o arquivo e escrevê-lo na response, usando esse cabeçalho http para forçar o download.

andre.hebeler

Cara ! desculpa a minha ignorância ! mais não compreendi mto bem a sua solução !!!

neste link eu chamaria a servlet … e nela emplemntaria o seu codigo postado acima ???

rafaelsantini

O trecho de código que postei lê um arquivo no servidor e o devolve ao navegador forçando o download, em um servlet.

Criado 18 de fevereiro de 2009
Ultima resposta 19 de fev. de 2009
Respostas 12
Participantes 3