No está claro qué API de persistencia estás usando. ¿JDBC? JPA? ¿Buen viejo Hibernate? Asumiré JDBC. En JDBC, puede usar PreparedStatement#setBinaryStream()
para almacenar un InputStream
en la base de datos, o PreparedStatement#setBytes()
para almacenar un byte[]
en la base de datos De cualquier manera, en PostgreSQL necesita un bytea
columna para esto.
Mientras verifica el archivo cargado por un PdfReader
primero, el InputStream
es inadecuado. Es decir, solo se puede leer una vez. El cliente no volverá a enviar el archivo varias veces cada vez que necesite leer el InputStream
otra vez. Necesitas copiar el InputStream
a un byte[]
primero.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
es parte de Apache Commons IO; si está usando FileUpload, entonces ya lo tiene)
No olvide cambiar iText para usar el byte[]
en cambio:
PdfReader localPdfReader = new PdfReader(filecontent);
Después de haberlo validado por iText, puede almacenarlo en un PostgreSQL bytea
columna usando JDBC de la siguiente manera:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();