Non è chiaro quale API di persistenza stai utilizzando. JDBC? APP? Il buon vecchio letargo? Presumo JDBC. In JDBC, puoi utilizzare PreparedStatement#setBinaryStream()
per memorizzare un InputStream
nel database o PreparedStatement#setBytes()
per memorizzare un byte[]
nella banca dati. Ad ogni modo, in PostgreSQL è necessario un bytea
colonna per questo.
Mentre stai verificando il file caricato con un PdfReader
prima, il InputStream
non è adatto. Può essere letto solo una volta. Il client non invierà nuovamente il file più volte ogni volta che devi leggere InputStream
ancora. Devi copiare InputStream
a un byte[]
primo.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
fa parte di Apache Commons IO; se stai usando FileUpload, lo hai già)
Non dimenticare di modificare iText per utilizzare il byte[]
invece:
PdfReader localPdfReader = new PdfReader(filecontent);
Dopo averlo convalidato da iText, puoi archiviarlo in un bytea
PostgreSQL colonna utilizzando JDBC come segue:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();