L'API de persistance que vous utilisez n'est pas claire. JDBC ? JPA ? Bon vieux Hiberner ? Je suppose JDBC. Dans JDBC, vous pouvez utiliser PreparedStatement#setBinaryStream()
pour stocker un InputStream
dans la base de données, ou PreparedStatement#setBytes()
pour stocker un byte[]
dans la base de données. Quoi qu'il en soit, dans PostgreSQL, vous avez besoin d'un bytea
colonne pour cela.
Pendant que vous vérifiez le fichier téléchargé par un PdfReader
d'abord, le InputStream
est inadapté. Il ne peut notamment être lu qu'une seule fois. Le client ne va pas renvoyer le fichier plusieurs fois à chaque fois que vous devez lire le InputStream
encore. Vous devez copier le InputStream
à un byte[]
première.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
fait partie d'Apache Commons IO ; si vous utilisez FileUpload, alors vous l'avez déjà)
N'oubliez pas de changer iText pour utiliser le byte[]
à la place :
PdfReader localPdfReader = new PdfReader(filecontent);
Après l'avoir validé par iText, vous pouvez le stocker dans un bytea
PostgreSQL colonne en utilisant JDBC comme suit :
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();