Ich versuche, eine Datei mit Play-API-Framework herunterladen. Da die gesamte Datenzugriffsschicht bereits mit Futures implementiert wurde, möchte ich auch den Download mit asynchronen Aktionen erhalten. Der folgende Codeabschnitt funktioniert jedoch nicht. Und wenn ich nicht arbeite, meine ich, dass die an den Client gesendete Datei nicht mit der Datei auf dem Server übereinstimmt.laden Sie eine Datei mit Play-Web-API (async)
val sourcePath = "/tmp/sample.pdf"
def downloadAsync = Action.async {
Future.successful(Ok.sendFile(new java.io.File(sourcePath)))
}
Doch dieses Stück funktioniert:
def download = Action {
Ok.sendFile(new java.io.File(sourcePath))
}
Jeder Vorschlag, wie ich die Asynchron-Methode zu arbeiten zu bekommen?
Sowohl "Action.apply" als auch "Action.async" sind async! Im ersten Fall übergeben Sie einen "normalen" Wert (kein Future) und in einem anderen Fall übergeben Sie ein Future, siehe [hier] (https://www.playframework.com/documentation/2.4.x/ScalaAsync#actions-are -asynchron-standardmäßig). Da Play selbst den [zweiten Weg] (https://www.playframework.com/documentation/2.4.x/ScalaStream#serving-files) empfiehlt (und es wird async), das ist der Weg zu gehen .. :) –