Enviar arquivo para o cliente a partir do banco de dados

Boa noite galera, estou com um problemão aqui e necessito da ajuda de vocês caso possível. =)))
Em meu banco de dados existe um tabela com um campo LONGBLOB que utilizo para gravar arquivos sob a forma de bytes[]
A partir do meu hd consigo salvar normalmente um arquivo no bd.

Porém, necessito disponibilizar esses arquivos para download. A minha dúvida é a seguinte:

Como posso enviar um arquivo para um cliente usando JSF? Digo, na hora que o cliente solicitar, os bytes do arquivo sejam lidos do BD e enviados para o cliente de uma forma que o cliente possa salva-lo em seu hd.

Não sei se fui claro… aguardo a ajuda de vocês
abraços…

cria arquivo temporário e disponibiliza o link

Caso tu queiras manter tuas imagens em banco a dica do hiarlay é uma boa, mas eu sugiro tu alterar esta estrutura funcional do upload de imagens salvando no banco somente o path das tuas imagens…

Abs

Amigo, consegui salvar o arquivo temporário no disco, porém não consigo envia-lo ao cliente.
Como disse, estou usando jsf… Criei um comandLink na qual sua ação chama o método de um bean que retorna uma String, essa string contém o path do arquivo.
Ao clicar no link nada acontece. =/

amigo, estou trabalhando com arquivos pdf. Mas a lógica é a mesma… os arquivo estão gravando no banco em um campo LONGBLOB.
Pensei em fazer como você disse, salvar os arquivo enviados no disco e no banco salvar apenas o path dos arquivos para quando o cliente solicitar eu retornar a path com o caminho do arquivo. Porém não consigo criar esse link (usando jsf) que me retorne o arquivo para download a partir da path (a path será passada com retorno de uma operação de um managed bean).

Abraços, aguardo retorno.

Amigo, consegui salvar o arquivo temporário no disco, porém não consigo envia-lo ao cliente.
Como disse, estou usando jsf… Criei um comandLink na qual sua ação chama o método de um bean que retorna uma String, essa string contém o path do arquivo.
Ao clicar no link nada acontece. =/

amigo, estou trabalhando com arquivos pdf. Mas a lógica é a mesma… os arquivo estão gravando no banco em um campo LONGBLOB.
Pensei em fazer como você disse, salvar os arquivo enviados no disco e no banco salvar apenas o path dos arquivos para quando o cliente solicitar eu retornar a path com o caminho do arquivo. Porém não consigo criar esse link (usando jsf) que me retorne o arquivo para download a partir da path (a path será passada com retorno de uma operação de um managed bean).

Abraços, aguardo retorno.
[/quote]

Para criar o link senão me engano tu tens como pegar o path da tua aplicação jsf da seguinte forma:

HttpSession session = (HttpSession) FacesContext.getCurrentInstance()session.getServletContext().getContextPath();

Ai é só tu concatenar com o local do teu arquivo na aplicação…

Espero ter ajudado…

Gilvan, faça da seguinte maneira que vai dar certo:

String pagina = "/<nome do contexto da aplicação>/<subpasta se houver>/<nome do arquivo com extensão>" FacesContext.getCurrentInstance().getExternalContext().redirect(pagina);

A string pagina deve ser digitada substituindo os valores pelo valores reais da localização do arquivo.
Vai abrir o pdf no navegador.

[Preguiça de ler o topico inteiro]

Pelo que pude entender voce quer disponibilizar documentos guardados num banco de dados no formato BLOB?

se for, faça isso diretamente no navegador.

Faça a leitura desde arquivo e escreve na OutputStream do contexto.

Dependendo do navegador voce pode dar a opção de abrir o arquivo no navegador, como um pdf. Ou então setar a contentType da Response como “application/download”. Ao abrir o arquivo o cliente poderá definir em que diretorio ele irá salvar o arquivo.