Het is onduidelijk welke persistentie-API u gebruikt. JDBC? JP? Goeie winterslaap? Ik ga uit van JDBC. In JDBC kunt u PreparedStatement#setBinaryStream()
om een InputStream op te slaan in de database, of PreparedStatement#setBytes()
om een byte[] op te slaan in de databank. Hoe dan ook, in PostgreSQL heb je een bytea
kolom hiervoor.
Terwijl u het geüploade bestand verifieert met een PdfReader eerst de InputStream ongeschikt is. Het kan namelijk maar één keer gelezen worden. De client zal het bestand niet meerdere keren opnieuw verzenden elke keer dat u de InputStream moet lezen opnieuw. U moet de InputStream . kopiëren naar een byte[] eerst.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils maakt deel uit van Apache Commons IO; als je FileUpload gebruikt, dan heb je het al)
Vergeet niet iText te wijzigen om de byte[] . te gebruiken in plaats daarvan:
PdfReader localPdfReader = new PdfReader(filecontent);
Nadat je het hebt gevalideerd door iText, kun je het opslaan in een PostgreSQL bytea kolom met JDBC als volgt:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();