Не е ясно какъв 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();