2016-06-02 8 views
1

der Anzeige Ich verwende Finatra 2.1.6 mit diesem Code:Finatra Downloads HTML-Datei, statt es

get("/:*") { request: Request => 
response.ok.fileOrIndex(
    request.params("*"), 
    "index.html") 
} 

Wenn ich laufen diese von z.B. IntelliJ, es funktioniert einwandfrei und zeigt die HTML-Datei an. Allerdings, wenn ich den Server aus einem assembly jar (mit sbt assembly) starten, es nicht: Immer wenn ich versuche, index.html, die ich in src/resources/index.html eingegeben habe, versucht, die Datei zu downloaden, da der contentType auf application/octet-stream statt gesetzt ist zB text/html.

Wie kann ich das Verhalten ändern, so dass es die HTML-Datei (oder CSS, JS, ...) rendert, anstatt es herunterzuladen?

Antwort

1

Schließlich könnte das Problem lösen. Meine Merge-Strategie für sbt assembly wäre so etwas wie

val meta = """META.INF(.)*""".r 
assemblyMergeStrategy in assembly := { 
    ... 
    case meta(_) => MergeStrategy.discard 
    ... 
} 

die die Datei verwerfen würde mime.types das, was Art für eine bestimmte Dateierweiterung verwenden MIME bezeichnet. Ich änderte dies zu

val metaMime = """META.INF(.)mime.types""".r 
val meta = """META.INF(.)*""".r 
assemblyMergeStrategy in assembly := { 
    ... 
    case metaMime(_) => MergeStrategy.deduplicate 
    case meta(_) => MergeStrategy.discard 
    ... 
} 

und jetzt funktioniert es vollkommen in Ordnung.