Download de arquivo no danco de dados com jsp

7 respostas
Aldeir

Pessoal, me ajudem por favor

Preciso criar um link para download de um arquivo que foi inserido direto no mysql.
Fiz a inserção desses arquivo na aplicação desktop, mas em jsp, não sei como fazer o download.
O tipo de dados que utilizei foi longblob.

7 Respostas

evertonsilvagomesjav

Seria fazer upload do arquivo do banco e depois criar um link pra download?

Aldeir

Não, o arquivo será inserido somente pela aplicação desktop, mas se você puder me mostrar com faço upload também agradeço.
Mas a princípio é somente o download

Obrigado. Meu tcc está dependendo disso.

Aldeir

Ah, me desculpa, entendi sua pergunta. É isso mesmo, pego o arquivo que está no banco de dados como uma array de bytes e fazer o download através de um link.

evertonsilvagomesjav

Como vc ja tem o arquivo em um array de bytes basta vc cria um comandLink e criar um evento para quando o usuario clicar nesse commandLink(que terá o nome do arquivo por exemplo) vc pegar esse array de bytes e passar para um servlet abrir o arquivo para download. No meu exemplo eu to passando o caminho do arquivo para fazer o dl, mas vc pode usar o array de bytes, nunca tentei mas deve funcionar.

Aqui eu redireciono para um servlet abrir o arquivo, então vc precisa criar um servlet.
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); // pego o response
		
		try {					
			// Pegando o contentType
			String contentType = anexo.getContentType();
			if(contentType.contains("doc") || contentType.contains("docx")){
				contentType = "application/msword";
			} 		
			String caminhoArquivo = anexo.getCaminhoArquivo();// pegando o caminho do arquivo para fazer o dl
			response.sendRedirect("/RFE_WEB/AbreArquivoDownload?Anexo="+URLEncoder.encode(caminhoArquivo,"ISO-8859-1") +"&Type="+contentType +"&FileName="+URLEncoder.encode(anexo.getNomeArquivo(),"ISO-8859-1")); // Redirecionando para o servlet fazer o dl		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
No método doGet() do servlet vc abre o arquivo para dl
/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub		

		request.setCharacterEncoding("ISO-8859-1");  
		
		String type = request.getParameter("Type");
				
		String fileName = URLDecoder.decode(request.getParameter("FileName"), "ISO-8859-1");	
		
		String caminhoDoArquivo = URLDecoder.decode(request.getParameter("Anexo"),"ISO-8859-1");		
					
		File anexo = new File(caminhoDoArquivo);
		
		byte[] arquivo = new Arquivo().fileToByteArray(anexo);
		
		response.setContentType(type);
		
		response.setContentLength(arquivo.length);
	    
	    response.setHeader("Content-Disposition","attachment;filename=" +fileName);   
		
		ServletOutputStream servletOutputStream = response.getOutputStream();		
		
		servletOutputStream.write(arquivo);
		
		servletOutputStream.flush();
		
	    servletOutputStream.close();	    
	}
Aldeir

Valeu Everton,

vou tentar, depois vou postar o resultado.

evertonsilvagomesjav

ok, qualquer coisa fala ai :smiley:

Aldeir

Ok, como eu mostaria esse commandLink?

Criado 22 de setembro de 2011
Ultima resposta 27 de set. de 2011
Respostas 7
Participantes 2