Не е ясно какъв API за постоянство използвате. JDBC? JPA? Добър стар Hibernate? Ще приема JDBC. В JDBC можете да използвате PreparedStatement#setBinaryStream()
за съхраняване на InputStream в базата данни или PreparedStatement#setBytes()
за съхраняване на byte[] в базата данни. Така или иначе, в PostgreSQL имате нужда от bytea
колона за това.
Докато проверявате качения файл от PdfReader първо, InputStream е неподходящо. А именно може да се чете само веднъж. Клиентът няма да изпраща повторно файла няколко пъти всеки път, когато трябва да прочетете InputStream отново. Трябва да копирате InputStream към byte[] първи.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils е част от Apache Commons IO; ако използвате FileUpload, значи вече го имате)
Не забравяйте да промените iText, за да използвате byte[] вместо това:
PdfReader localPdfReader = new PdfReader(filecontent);
След като сте го потвърдили от iText, можете да го съхраните в PostgreSQL bytea колона с помощта на JDBC, както следва:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();