Então, na verdade eu já faço isso, começando pelo meu banco, eu possua uma coluna do tipo bytea que recebe esse arquivo:
arquivo bytea
Já indo pro código, na minha tela eu possuo um fileuploader
<p:fileUpload id="declaracao" value="#{alunoMB.aluno.arquivorecebido}" mode="simple" dragDropSupport="false" update="messages" sizeLimit="100000" fileLimit="1"/>
Esse variável que está mapeada ali, é uma String, que na classe está assim:
private String arquivorecebido;
Já no meu DAO eu faço assim:
File file = new File("C:\\Downloads\\Documento.pdf");
InputStream is = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
int offset = 0;
int numRead = 0;
while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
E o valor que é enviado pro meu banco é esse:
"%PDF-1.7\0151 0 obj\015<</Type /XObject /Subtype /Image /Name /Im1 /Width 1654 /Height 2338 /Length 251653/ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter [ /DCTDecode ] >> stream\015\377\330\377\340\000\020JFIF\000\001\001\001\000\310\000\310\000\000\37 (...)"
Eu ainda não tentei recuperar o arquivo pra ver se ele salvou certo, mas acredito que sim, meu maior problema é pegar o diretório, ali no exemplo eu passo ele como parâmetro, o que eu preciso é pegar nofileuploader