Det er uklart, hvilken persistens API du bruger. JDBC? JPA? Gode hibernate? Jeg vil antage JDBC. I JDBC kan du bruge PreparedStatement#setBinaryStream()
for at gemme en InputStream
i databasen, eller PreparedStatement#setBytes()
for at gemme en byte[]
i databasen. Uanset hvad, i PostgreSQL har du brug for en bytea
kolonne for dette.
Mens du verificerer den uploadede fil med en PdfReader
først InputStream
er uegnet. Den kan nemlig kun læses én gang. Klienten vil ikke sende filen igen flere gange, hver gang du skal læse InputStream
igen. Du skal kopiere InputStream
til en byte[]
først.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
er en del af Apache Commons IO; hvis du bruger FileUpload, så har du det allerede)
Glem ikke at ændre iText til at bruge byte[]
i stedet:
PdfReader localPdfReader = new PdfReader(filecontent);
Når du har valideret det af iText, kan du gemme det i en PostgreSQL bytea
kolonne ved hjælp af JDBC som følger:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();