Det är oklart vilket persistens-API du använder. JDBC? JPA? Bra hibernate? Jag antar JDBC. I JDBC kan du använda PreparedStatement#setBinaryStream()
för att lagra en InputStream
i databasen, eller PreparedStatement#setBytes()
för att lagra en byte[]
i databasen. Hur som helst, i PostgreSQL behöver du en bytea
kolumn för detta.
När du verifierar den uppladdade filen med en PdfReader
först InputStream
är olämpligt. Den kan nämligen bara läsas en gång. Klienten kommer inte att skicka om filen flera gånger varje gång du behöver läsa InputStream
om igen. Du måste kopiera InputStream
till en byte[]
först.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
är en del av Apache Commons IO; om du använder FileUpload har du det redan)
Glöm inte att ändra iText till att använda byte[]
istället:
PdfReader localPdfReader = new PdfReader(filecontent);
När du har validerat den av iText kan du lagra den i en PostgreSQL bytea
kolumn med JDBC enligt följande:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();