2016-05-24 9 views
2

私はDBに質問をして単純なテキストとして返す単純なアプリを持っています。 「プレーン/テキスト」応答は、CSV形式で行われます。それは別のプログラム(matlab、webreadを通して)によって読み込まれ、次に私たちは分析を行います。再生フレームワークでCSVデータを正しく提供する方法

これで、再生フレームワークが一部の設定を変更したようです。一方、このコードの前に。

def singleEventsMultipleRegions(peril: String, region: List[String]) = Action.async {   
    val theResult = db.run(filter(peril, region).result) 
    val intermediate = theResult.map(result => header + result.mkString("\r\n")) 
    intermediate.map(item => Ok(item)) 

私が欲しかったものを正確に返しました。今、約10000行後にMATLABが切断されます。ブラウザで結果を表示すると、応答全体が読み込まれます。むしろイライラします。

悲しいことに、私は何が起こっているのか分かりません...だれでも知っていますか?

第二に、誰もがCSV形式でデータを動的に提供するために「ネイティブ」の戦略

...の方向に私を指すことができますか? これを行う簡単な方法は、クライアントが早く読み上げを終了しないようにすることですか?

乾杯、私はここで、部分的な答えを持っている

答えて

1

サイモン。ほぼそれは、テーブルのヘッダーが含まれていないことを除いて...働く

def allPerilStream = Action { 
val stream = db.stream(allPerilsTable.result) 
val source = Source.fromPublisher(stream.mapResult(u => u.aPeril + "\n")).map(ByteString.apply) 
Ok.sendEntity(HttpEntity.Streamed(source, None, Some(""))) 

}

このようなストリームにヘッダーを挿入する方法についてのアイデアはありますか?

したがって、最終的な結論は次のとおりです。先物から直接akkaソースを作成することが可能であるように見えます(これは私に年齢がかかりました!!!!!)。あなたが知ったら、その

def allPerilStream = Action { 
val theResult = for(
    result <- db.run(allPerilsTable.result) 
) yield (
    header + 
    result.mkString("\n") 
) 
val source = Source.fromFuture(theResult).map(ByteString.apply) 
val entity = HttpEntity.Streamed(source, None, Some("")) 
Ok.sendEntity(entity) 

}私はトリックを行うとしている願っています

関連する問題