2016-05-03 24 views
-1

Ich möchte den Datei-Upload von der Webseite in die Datenbank implementieren. Ich muss eine temporäre Datei erstellen, mit der die Datei von der Webseite in die Datenbank übertragen wird. Ich habe dieses Java-Beispiel gefunden.Datei nach dem Upload löschen

public void copyFileLocation() throws IOException { 

     File temp = File.createTempFile("temp-file-name", ".tmp"); 

    } 

Gibt es eine Möglichkeit, die Datei automatisch nach erfolgreicher Kopie zu löschen? Ist diese Code-Plattform auch unabhängig? Ich muss die tanpolary Dateien auf verschiedenen Plattformen im tmp Ordner erstellen.

+1

Im Prinzip ist es nicht notwendig, in eine (temporäre) Datei hochzuladen. Man könnte den Upload sofort in die Datenbank schreiben. –

+0

"nach erfolgreicher Kopie?" welche Kopie ?? Haben Sie erwogen, 'File # renameTo' zu verwenden? –

+0

Sobald es kopiert wird, benutze 'Datei # delete()' – Sanjeev

Antwort

0

Speichern Sie die hochgeladenen Daten sofort in der Datenbank unter der Annahme einer Spalte mit dem SQL-Typ BLOB.

try (PreparedStatement stmt = connection.prepareStatement(
     "INSERT INTO files(blob) VALUES(?)"); 

    // Either: 
    InputStream in = ... uploaded file 
    // or: 
    byte[] data = ... uploaded file contents 
    ByteArrayInputStream in = new ByteArrayInputStream(data); 

    stmt.setBinaryStream(1, in); 
    stmt.executeUpdate(); 
} 

(Es gibt mehrere Upload-Lösungen.)

Der Vorteil weniger erfolgt schaufeln.

+0

Nun, ich dachte für eine solche Lösung, aber ich bin mir nicht sicher, ob ich den Schritt mit der Datei auf Dateisystem und einem mittleren Speicherpuffer (sagen wir es so) richtig, wenn ich falsch liege, aber RAM-Speicher wird verwendet werden, um die Daten temporär zu speichern. Und wenn ich 2 GB Datei auf VPS mit 1 GB RAM habe, wird das Ergebnis nicht sehr gut sein. Können Sie bitte Ihr Beispiel erweitern? Es ist nicht sehr klar, was ich InputStream oder Byte [] verwenden soll. –

+0

'Byte []' ist in der Tat Speicher hungrig. Im Allgemeinen sollte InputStream möglich sein. Und da JDBC _reads gestreamed_ ist, gibt es keinen großen Speicherverbrauch. Und wie sonst würde man am Ende die Datei speichern, wenn nicht von JDBC auf die gleiche Weise. ** Das Speichern von Pfaden zu permanenten Dateien ** wäre eine andere Lösung. Erleichtert das Backup. Könnte UUIDs als Namen verwenden. –

+0

Danke für die Information. –

Verwandte Themen