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…
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…
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).
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:
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.
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.