2017-12-12 2 views
1

Der Versuch, hochgeladene Bilder zu verarbeiten und dann das Ergebnis anzuzeigen. Wurde folgende: https://github.com/playframework/play-scala-fileupload-examplePlay Framework - So schreiben Sie in öffentliche Objekte

Relevante Schnipsel:

private def handleFilePartAsFile: FilePartHandler[File] = { 
    case FileInfo(partName, filename, contentType) => 
    val path: Path = Files.createTempFile("multipartBody", "tempFile") 
    val fileSink: Sink[ByteString, Future[IOResult]] = FileIO.toPath(path) 
    val accumulator: Accumulator[ByteString, IOResult] = Accumulator(fileSink) 
    accumulator.map { 
     case IOResult(count, status) => 
     logger.info(s"count = $count, status = $status") 
     FilePart(partName, filename, contentType, path.toFile) 
    } 
} 

Wie kann ich den absoluten Pfad der /public/images Asset-Ordner, erhalten Sie das Bild zu schreiben, anstatt Files.createTempFile zu verwenden?

+0

Mögliches Duplikat von [Play Framework: So erhalten Sie den absoluten Pfad eines Assets] (https://stackoverflow.com/questions/14840043/play-framework-how-to-get-the-absolute-path-of-an -asset) –

+0

@ArtavazdBalayan Verknüpftes Problem bezieht sich auf den absoluten Pfad eines vorhandenen Assets, im Gegensatz zum absoluten Pfad des Asset-Verzeichnisses. – tamas7

Antwort

1

Ich nehme an, dass Sie Play 2.6 wie in dem Projekt von dem Link verwenden, den Sie erwähnten. In diesem Fall können Sie Pfad konstruieren, um in/public/Bilder-Ordnern von 4 Pfaden Datei:

  1. absoluten Pfad des entfalteten spielen! Anwendung
  2. Basis (relative) Pfad zu Vermögen Ordner
  3. /images
  4. Dateiname

In Scala:

val path = env.rootPath + af.assetsBasePath + "/images/" + filename 

Für 1. und 2. Teile müssen Sie Umwelt Auto-injizieren und AssetsFinder Objekte wie:

@Singleton 
class HomeController @Inject() (cc:MessagesControllerComponents, 
    af: AssetsFinder, env: Environment) 
(implicit executionContext: ExecutionContext) 
... 
Verwandte Themen