Frage

Ich versuche, ein Bild mit Play Framework2 auf MySQL hochzuladen.

Im Play Framework 1.24 verwende ich „play.db.jpa.Blob" Und "multipart/form-data" um ein Bild in MySQL hochzuladen.

Aber in Play Framework2 gibt es keine Blob...Wie kann ich das Bild mit hochladen? "multipart/form-data" zu mySQL?

War es hilfreich?

Lösung

Das solltest du auf jeden Fall keine Lagerung Ihre Dateien in eine Datenbank.Das ist eine schlechte Idee.Stattdessen sollten Sie Ihre Dateien in ein lokales oder entferntes Dateisystem hochladen und nur den Dateinamen/Dateipfad in Ihrer Datenbank speichern.

BEARBEITEN : Da meine Antwort abgelehnt wurde, versuche ich, etwas mehr Erklärung zu geben:

  1. Wenn Sie im Play-Framework mit Blob-Typen arbeiten, wird zunächst ein BLOB-Feld in Ihrer Datenbank erstellt.Allerdings verfügen nicht alle Datenbanken über dieselbe Implementierung hinter dem Blob-Typ.In einigen RDMS verfügt der Blob-Typ über begrenzten Speicher und in anderen (z. B. MySQL) wird die maximale Größe Ihres Blob-Felds durch die Konfiguration bestimmt.

  2. Zweitens wird Ihr Speicherverbrauch explodieren, wenn Sie Ihre Dateien aus der Datenbank abrufen und an den Benutzer senden.Ganz einfach, weil Play das Blob-Feld in den Speicher lädt, bevor es an den Benutzer gesendet wird.

  3. Wenn Sie außerdem viele Dateien in Ihrer Datenbank gespeichert haben, wird diese sehr schnell überlastet.(Anfragen).Ihr nächster Schritt besteht darin, die Datenbank auf einen neuen Computer zu verschieben.Wenn Sie jedoch viele Daten gespeichert haben, ist Ihr nächster Engpass möglicherweise nicht die Datenbank, sondern die Bandbreite zwischen Ihrer Anwendung und dem Datenbankserver.

  4. Die Verwendung einer Datenbank zur Dateispeicherung ist aufgrund des durch die Datenbank verursachten Overheads immer langsamer und verbraucht mehr Speicher als das direkte Lesen des Dateisystems.

Die Verwendung Ihrer Datenbank als Dateispeicher-Engine ist eine einfach und schnell einzurichtende Lösung, die jedoch voller Unannehmlichkeiten ist, die sich später im Verlauf Ihres Projekts wirklich ändern könnten.

Andere Tipps

Eine andere Möglichkeit besteht darin, einen Verweis auf ein Foto in der Datenbank zu speichern.

Im Hinblick auf:

<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

Im Controller:

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}

Dies ist, was das Blob-Objekt transparent verarbeitet.Es speichert die Datei im Dateisystem und speichert eine Referenz in der Datenbank.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top