Próbuję zezwolić użytkownikom na przesyłanie zdjęć na serwer, a następnie ich wyświetlanie. Przesyłanie odbywa się zgodnie z opisem in this guide. Oto kod:Jak obsługiwać wgrane pliki w Play! 2 przy użyciu 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"
)
}
}
Nie jest dla mnie jasne, jak przesłać obrazy przesłane użytkownikom, którzy chcą je zobaczyć. Obecnie hostuję serwer na własnym komputerze, więc fragment kodu z przewodnika zapisuje pliki na dysku D :, który nie jest (i nie powinien być) dostępny w Internecie. O ile widzę są 2 opcje:
Store zdjęcia pod/folderu publicznego w moim projekcie (ten, który jest dedykowany do aktywów). Zobacz tutaj: http://www.playframework.org/documentation/2.0/Assets
Napisz własny kontroler obsługujący obrazy z niestandardowych lokalizacji z dysku.
Dla 1, nie jestem pewien, czy to jest celem aktywów. Dla 2, nie mam pojęcia, jak napisać taki kontroler.
Ciekawe . Jednakże zrozumiałem, że przechowywanie plików bezpośrednio w bazie danych może być złym zwyczajem, podążając za tym pytaniem: http://stackoverflow.com/questions/11416735/how-to-upload-a-file-to-the-database- using-playframework-in-scala –
Jak zwykle to zależy. GridFS jest wyraźnie stworzony dla tego rodzaju problemu, podobnie jak Amazon S3. Jeśli przechowujesz pliki w lokalnym systemie plików, masz duży problem, gdy potrzebujesz drugiego serwera jednego dnia. Spójrz na kontroler aktywów, nie jest to trudne do zrozumienia. –
Możesz także użyć serwera NAS do współużytkowania pamięci masowej między serwerami i zamontowania jej w odpowiednich miejscach. Możesz również przesłać swoje pliki do CDN i pozwolić, by służyły twoim plikom. Przechodzenie z MongoDB tylko do przechowywania plików nie jest lepszym wyborem, jak sądzę. – iwalktheline