Domanda

Sto cercando di caricare l'immagine su MySQL usando Play Framework2.

In Play Framework 1.24, uso "play.db.jpa.Blob" e "multipart/form-data" per caricare un'immagine in MySQL.

Ma in Play Framework2 non c'è Blob ... Come posso caricare l'immagine usando "multipart/form-data" su MySQL?

È stato utile?

Soluzione

Dovresti assolutamente non storage i tuoi file in un database. Questa è una cattiva idea. Invece, è necessario caricare i file su alcuni filesystem locali o distanti e salvare solo il nome file / filepath nel tuo database.

Modifica: Dalla mia risposta come downvoled, proverò a dare un po 'più di spiegazione:

    .
  1. Prima di tutto, quando si lavora con i tipi BLOB in PLAY Framework, creerà un campo BLOB nel database. Ma, non tutti i database hanno la stessa implementazione del tipo BLOB. In alcuni RDMS, il tipo BLOB avrà memoria limitata e in altri (come MySQL) La dimensione massima del campo BLOB sarà determinata dalla configurazione.

  2. In secondo luogo, quando si sta recuperando i file dal database e inviandoli all'utente, il tuo utilizzo della memoria sta per esplodere. Molto semplicemente perché, gioca carichi il campo BLOB in memoria prima di inviarlo all'utente.

  3. Plus, se hai molti file memorizzati nel database, verrà sovraccaricato molto rapidamente. (richieste). La prossima mossa sposterà il database su una nuova macchina. Ma se hai molti dati memorizzati, il tuo prossimo collo di bottiglia potrebbe non essere il database ma la banda tra l'applicazione e il server del database.

  4. L'utilizzo di un database per la memorizzazione dei file sarà sempre più lento e consumando più memoria della lettura diretta del filesystem a causa del sovraccarico creato dal database.

    L'utilizzo del database come motore di archiviazione del file è una soluzione facile e veloce alla configurazione, ma è piena di inconvenienti che potrebbero davvero cambiare le cose più avanti durante il progetto.

Altri suggerimenti

Un altro modo, è possibile memorizzare il riferimento alla foto nel database.

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

nel 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
            }
}
.

Questo è ciò che l'oggetto Blob gestisce trasparente.Memorizza il file nel filesystem e memorizza un riferimento nel DB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top