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();