Não está claro qual API de persistência você está usando. JDBC? JPA? Bom e velho Hibernate? Vou assumir JDBC. Em JDBC, você pode usar
PreparedStatement#setBinaryStream()
para armazenar um InputStream
no banco de dados ou PreparedStatement#setBytes()
para armazenar um byte[]
no banco de dados. De qualquer forma, no PostgreSQL você precisa de um bytea
coluna para isso. Como você está verificando o arquivo enviado por um
PdfReader
primeiro, o InputStream
é inadequado. Pode ser lido apenas uma vez. O cliente não vai reenviar o arquivo várias vezes cada vez que você precisar ler o InputStream
novamente. Você precisa copiar o InputStream
para um byte[]
primeiro. ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(
IOUtils
faz parte do Apache Commons IO; se você estiver usando FileUpload, então você já o tem) Não se esqueça de alterar o iText para usar o
byte[]
em vez de:PdfReader localPdfReader = new PdfReader(filecontent);
Depois de validá-lo pelo iText, você pode armazená-lo em um PostgreSQL
bytea
coluna usando JDBC da seguinte forma:statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();