Tenha um aplicação WEB e estou travado em uma situação:
Tenho uma tela que anexo um arquivo PDF…
Depois de ser anexado eu pego esse arquivo e transformo em byte[] e gravo no MYSQL como BLOB.
Porém não estou conseguindo fazer o inverso, ou seja, preciso pegar esse byte[] que esta no banco e listar ele na tela, que seja em um link do tipo “Visualizar”… Como faço essa conversão? Para eu pegar no Front esse PDF?
Então… faltou essa informação… eu nao preciso armazenar esse PDF em nenhum lugar, pois ele só irá aparecer quando o “Cliente” logar e clicar em visualizar, então seria um arquivo TEMP…
Seria um arquivo temp que deveria ficar numa pasta temp e ser lido quando o usuário necessitasse.
Ou, o melhor dos cenários, esse arquivo deve ser gerado apenas quando o usuário clica em visualizar.
Existem vantagens e desvantagens na forma de manter os arquivos salvos.
Por banco, integridade e transação do processo ficam garantidos, ao contrário de guardar os arquivos por conta própria. Então depende dos requisitos/exigências, que nem sempre o mais prioritário é o máximo de desempenho.
Via banco é importante armazenar os blobs em um tablespace próprio. Os SGDBs mais profissionais suportam.
Se essa é a regra, não tem necessidade de armazenar no banco de dados. Você está usando uma estrutura limitada (banco de dados) para armazenar algo volátil.
SGBD utiliza o filesystem… Em algum momento, o espaço para armazenar acaba.
Sem falar da concorrência no insert…
E se o objetivo é, unicamente, apresentar quando o usuário clica no “Visualizar”, basta gerar on demand, quando é necessário. Pronto.
Tudo no final é filesystem, independente dos meios. Esse limite vai ser do “disco”, não do banco. Podem ter n tablespaces, cada um em um disco/local. Se for necessário, uma única tabela de blobs em um tablespace. Sobre os gargalos concordo, mas como falei na outra mensagem, depende dos requisitos, aqui o mais prioritário é a integridade/transação, não é sistema tipo facebook.
Justamente. Mas, tudo isso acaba em limitações a serem consideradas.
Além disso, o que ele colocou não esclarece se estes arquivos serão gerados e gravados e ficarão lá eternamente ou serão excluídos a cada período de tempo.
O seguinte, melhor eu explicar o funcionamento rapidamente…
É um sistema de advocacia, então o advogado(no caso sera o “admin”) pode criar um cliente e um processo…
O processo só existe quando tem um cliente para ele vincular. Então eu preciso deixar armazenado esse arquivo no banco (seria o processo em PDF), pois toda vez que o cliente quiser consultar, vai estar disponível…
Ok, entendi o cenário.
Porém, ainda penso que o mais adequado é você manter os dados do processo no banco e, quando necessário, gerar o PDF a partir deles.
Mas, é uma opção fazer conforme você precisa.
De qualquer forma, você só precisa ler o BLOB:
byte[] processo = rs.getBytes("coluna_onde_fica_o_processo");