Nie jest jasne, jakiego interfejsu API trwałości używasz. JDBC? JPA? Dobra, stara hibernacja? Zakładam JDBC. W JDBC możesz użyć PreparedStatement#setBinaryStream()
do przechowywania InputStream w bazie danych lub PreparedStatement#setBytes()
do przechowywania byte[] w bazie danych. Tak czy inaczej, w PostgreSQL potrzebujesz bytea
w tym celu.
Gdy weryfikujesz przesłany plik przez PdfReader najpierw InputStream jest nieodpowiedni. Można go przeczytać tylko raz. Klient nie wyśle ponownie pliku wielokrotnie za każdym razem, gdy będziesz musiał odczytać InputStream ponownie. Musisz skopiować InputStream do byte[] pierwszy.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils jest częścią Apache Commons IO; jeśli używasz FileUpload, to już go masz)
Nie zapomnij zmienić iText, aby używał byte[] zamiast tego:
PdfReader localPdfReader = new PdfReader(filecontent);
Po sprawdzeniu poprawności przez iText, możesz przechowywać je w bytea PostgreSQL kolumna za pomocą JDBC w następujący sposób:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();