Es ist unklar, welche Persistenz-API Sie verwenden. JDBC? JPA? Der gute alte Winterschlaf? Ich gehe von JDBC aus. In JDBC können Sie PreparedStatement#setBinaryStream()
um einen InputStream
zu speichern in der Datenbank oder PreparedStatement#setBytes()
um ein byte[]
zu speichern in der Datenbank. So oder so, in PostgreSQL benötigen Sie ein bytea
Spalte dafür.
Während Sie die hochgeladene Datei mit einem PdfReader
überprüfen zuerst der InputStream
ist ungeeignet. Es kann nämlich nur einmal gelesen werden. Der Client wird die Datei nicht jedes Mal erneut senden, wenn Sie den InputStream
lesen müssen wieder. Sie müssen den InputStream
kopieren zu einem byte[]
Erste.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
ist Teil von Apache Commons IO; wenn Sie FileUpload verwenden, haben Sie es bereits)
Vergessen Sie nicht, iText so zu ändern, dass byte[]
verwendet wird stattdessen:
PdfReader localPdfReader = new PdfReader(filecontent);
Nachdem Sie es von iText validiert haben, können Sie es in einem PostgreSQL bytea
speichern Spalte mit JDBC wie folgt:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();