Sto tentando di consentire agli utenti di caricare foto sul server e quindi visualizzarle. Il caricamento avviene come descritto in this guide. Ecco il codice:Come pubblicare file caricati in Play! 2 usando Scala?
def upload = Action(parse.multipartFormData) { request =>
request.body.file("picture").map { picture =>
import java.io.File
val filename = picture.filename
val contentType = picture.contentType
picture.ref.moveTo(new File("/tmp/picture"))
Ok("File uploaded")
}.getOrElse {
Redirect(routes.Application.index).flashing(
"error" -> "Missing file"
)
}
}
Non è chiaro per me il modo di servire le immagini caricate di nuovo per gli utenti che vogliono vederli. In questo momento sto ospitando il server sul mio computer, quindi il frammento di codice della guida scrive i file sul mio disco D: che non è (e non dovrebbe essere) disponibile da Internet. Per quanto posso vedere ci sono 2 opzioni:
Conservare le foto nella cartella/public nel mio progetto (quello che è dedicato ai beni). Vedi qui: http://www.playframework.org/documentation/2.0/Assets
Scrivi il mio controller che assegna immagini da posizioni personalizzate dal mio disco.
Per 1, non sono sicuro se questo è lo scopo delle risorse. Per 2, non ho idea di come scrivere un controller di questo tipo.
Interessante . Tuttavia, ho capito che archiviare i file direttamente nel database potrebbe essere una cattiva pratica, seguendo questa domanda: http://stackoverflow.com/questions/11416735/how-to-upload-a-file-to-the-database- using-playframework-in-scala –
Come sempre, dipende. GridFS è esplicitamente creato per questo tipo di problema, come Amazon S3. Se archivi i tuoi file nel file system locale, hai un grosso problema quando hai bisogno di un secondo server un giorno. Dai un'occhiata al controller delle risorse, non è difficile da capire. –
È inoltre possibile utilizzare un NAS per condividere lo spazio tra i server e montarlo nei punti giusti. Puoi anche caricare i tuoi file su un CDN e lasciarli servire ai tuoi file. Andare con MongoDB solo per la memorizzazione dei file non è la scelta migliore, credo. – iwalktheline