Tidak jelas API ketekunan apa yang Anda gunakan. JDBC? JPA? Hibernasi yang bagus? Saya akan menganggap JDBC. Di JDBC, Anda dapat menggunakan PreparedStatement#setBinaryStream()
untuk menyimpan InputStream
dalam database, atau PreparedStatement#setBytes()
untuk menyimpan byte[]
dalam database. Bagaimanapun, di PostgreSQL Anda memerlukan bytea
kolom untuk ini.
Saat Anda memverifikasi file yang diunggah dengan PdfReader
pertama, InputStream
tidak cocok. Yaitu hanya bisa dibaca sekali. Klien tidak akan mengirim ulang file beberapa kali setiap kali Anda perlu membaca InputStream
lagi. Anda perlu menyalin InputStream
ke byte[]
pertama.
ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();
(IOUtils
adalah bagian dari Apache Commons IO; jika Anda menggunakan FileUpload, maka Anda sudah memilikinya)
Jangan lupa untuk mengubah iText menggunakan byte[]
sebagai gantinya:
PdfReader localPdfReader = new PdfReader(filecontent);
Setelah Anda memvalidasinya dengan iText, Anda dapat menyimpannya dalam bytea
PostgreSQL kolom menggunakan JDBC sebagai berikut:
statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();