Není jasné, jaké persistentní API používáte. JDBC? JPA? Dobrý hibernace? Předpokládám JDBC. V JDBC můžete použít PreparedStatement#setBinaryStream()
pro uložení InputStream
v databázi nebo PreparedStatement#setBytes()
pro uložení byte[]
v databázi. Ať tak či onak, v PostgreSQL potřebujete bytea
sloupec pro toto.
Při ověřování nahraného souboru pomocí PdfReader
nejprve InputStream
je nevhodný. Lze jej totiž přečíst pouze jednou. Klient nebude soubor opakovaně odesílat pokaždé, když si potřebujete přečíst InputStream
znovu. Musíte zkopírovat InputStream
na byte[]
První.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
je součástí Apache Commons IO; pokud používáte FileUpload, pak jej již máte)
Nezapomeňte změnit iText tak, aby používal byte[]
místo toho:
PdfReader localPdfReader = new PdfReader(filecontent);
Po ověření pomocí iText jej můžete uložit do bytea
PostgreSQL pomocí JDBC takto:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();