Ola pessoal estou fazendo um sistema de gerenciamento de documento, e gostaria de saber como eu faco para quando o usuario clicar na minha url iniciar o download do arquivo.
estou usando o framework strust 2
Ola pessoal estou fazendo um sistema de gerenciamento de documento, e gostaria de saber como eu faco para quando o usuario clicar na minha url iniciar o download do arquivo.
estou usando o framework strust 2
Tá, mas quando você clica em uma URL, a requisição faz com que os arquivos relativos à ela sejam baixados (imagens, scripts, etc).
Desta forma, basta que você coloque o arquivo a ser baixado e crie um link apontando para ele.
mas no meu caso, o navegador esta tentar e abrir o arquivo.
crie um iframe style: ‘display:none;
aponte seu src: DownloadArquivo?file_name=’ + seuarquivo
onde DownloadArquivo é um servlet mapeado no web.xml
public class DownloadArquivo extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, FileNotFoundException, IOException {
String param = request.getParameter("file_name");
if (param != null) {
if (!param.equals("")) {
String path = seuPath + param;
FileInputStream fis = new FileInputStream(path);
byte[] bytes = IOUtils.toByteArray(fis);
response.setContentType(tipo myme do arquivo pode gravar no banco ou coloque especifico);
response.setHeader("Content-Disposition", "attachment;filename=\"".concat(nomedoarquivo) + "\"");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
try {
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
} finally {
ouputStream.close();
}
}
}
}
}
}
não esqueça de mapear no web.xml
acredito que o drsmachado esta cerreto em sua afirmacao. acho que no meu caso nao funcionou por que nao estou pegando o caminho relativo do arquivo, pois o caminho esta c:/caminho/nomearquivo
como eu faco para pegar-lo ?
pois então se vc passar esse caminho c:/ pela url não dará certo! vc tem qeu passar uma referencia como id ou outra coisa para vc pegar lá no servidor ai sim lá vai poder acessar o c: para pegar o arquivo. use aquele servlet que te passei e chame pela url
uma melhor forma seria tudo pelo dwr
dwr.engine.openInDownload(Exec(ClasseDWR.downloadImage,[codigoFoto]));
public FileTransfer downloadFoto(Long codigoFoto) {
return new FileTransfer("fotoexemplo.png", "image/png",bytes);
}