sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan gemmer man en pdf-fil i postgresql-databasen ved hjælp af servlets?

Det er uklart, hvilken persistens API du bruger. JDBC? JPA? Gode ​​hibernate? Jeg vil antage JDBC. I JDBC kan du bruge PreparedStatement#setBinaryStream() for at gemme en InputStream i databasen, eller PreparedStatement#setBytes() for at gemme en byte[] i databasen. Uanset hvad, i PostgreSQL har du brug for en bytea kolonne for dette.

Mens du verificerer den uploadede fil med en PdfReader først InputStream er uegnet. Den kan nemlig kun læses én gang. Klienten vil ikke sende filen igen flere gange, hver gang du skal læse InputStream igen. Du skal kopiere InputStream til en byte[] først.

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

(IOUtils er en del af Apache Commons IO; hvis du bruger FileUpload, så har du det allerede)

Glem ikke at ændre iText til at bruge byte[] i stedet:

PdfReader localPdfReader = new PdfReader(filecontent);

Når du har valideret det af iText, kan du gemme det i en PostgreSQL bytea kolonne ved hjælp af JDBC som følger:

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



  1. Fatal fejl:Kald til en medlemsfunktion bind_param() på boolean

  2. Bestil rækkevalg efter flere kolonner

  3. Indsættelse af hex-værdi i MySQL

  4. Sådan begrænser du brugen af ​​en formular eller begrænser adgangen