sql >> Database >  >> RDS >> PostgreSQL

Hoe een pdf-bestand op te slaan in de postgresql-database met behulp van servlets?

Het is onduidelijk welke persistentie-API u gebruikt. JDBC? JP? Goeie winterslaap? Ik ga uit van JDBC. In JDBC kunt u PreparedStatement#setBinaryStream() om een ​​InputStream op te slaan in de database, of PreparedStatement#setBytes() om een ​​byte[] op te slaan in de databank. Hoe dan ook, in PostgreSQL heb je een bytea kolom hiervoor.

Terwijl u het geüploade bestand verifieert met een PdfReader eerst de InputStream ongeschikt is. Het kan namelijk maar één keer gelezen worden. De client zal het bestand niet meerdere keren opnieuw verzenden elke keer dat u de InputStream moet lezen opnieuw. U moet de InputStream . kopiëren naar een byte[] eerst.

ByteArrayOutputStream output = new ByteArrayOutputStream();
IOUtils.copy(localFileItem.getInputStream(), output);
byte[] filecontent = output.toByteArray();

(IOUtils maakt deel uit van Apache Commons IO; als je FileUpload gebruikt, dan heb je het al)

Vergeet niet iText te wijzigen om de byte[] . te gebruiken in plaats daarvan:

PdfReader localPdfReader = new PdfReader(filecontent);

Nadat je het hebt gevalideerd door iText, kun je het opslaan in een PostgreSQL bytea kolom met JDBC als volgt:

statement = connection.prepareStatement("INSERT INTO files (name, content) VALUES (?, ?)");
statement.setString(1, filename);
statement.setBytes(2, filecontent);
statement.executeUpdate();



  1. mysql trage zoekopdracht

  2. SQL Server (MSSQL DBA) Database-tutorials voor beginners Databasebeheerders

  3. Tijdstempels groeperen in MySQL met PHP

  4. SELECT werkt niet in node.js