sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur lagrar man en pdf-fil i postgresql-databasen med hjälp av servlets?

Det är oklart vilket persistens-API du använder. JDBC? JPA? Bra hibernate? Jag antar JDBC. I JDBC kan du använda PreparedStatement#setBinaryStream() för att lagra en InputStream i databasen, eller PreparedStatement#setBytes() för att lagra en byte[] i databasen. Hur som helst, i PostgreSQL behöver du en bytea kolumn för detta.

När du verifierar den uppladdade filen med en PdfReader först InputStream är olämpligt. Den kan nämligen bara läsas en gång. Klienten kommer inte att skicka om filen flera gånger varje gång du behöver läsa InputStream om igen. Du måste kopiera InputStream till en byte[] först.

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

(IOUtils är en del av Apache Commons IO; om du använder FileUpload har du det redan)

Glöm inte att ändra iText till att använda byte[] istället:

PdfReader localPdfReader = new PdfReader(filecontent);

När du har validerat den av iText kan du lagra den i en PostgreSQL bytea kolumn med JDBC enligt följande:

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



  1. MySql Hur man ställer in en lokal variabel i en uppdateringssats (syntax?)

  2. Oracle SQL-utvecklare:Fel - Testet misslyckades:Nätverksadaptern kunde inte upprätta anslutningen?

  3. Hitta kolumn som innehåller ett givet värde i MySQL

  4. Använda mySql via proxy-kast Orsakas av:java.sql.SQLException:Anropsbara uttalanden stöds inte. efter återanslutningen