2017-02-26 19 views
0

クライアント側からサーバーにアップロードする必要のあるExcelファイル(サイズ範囲は0〜100MB)があれば、解析されます。 Akka-Httpでそれを行うには?私はdocを読んで、彼らはjsonとcsv形式しかサポートしていないようです。Akka httpファイルを読み込んで解析してexcelファイルをアップロードする

さらに、サーバー側から見ると、ファイルをアップロードした後にのみ解析する必要がありますか、アップロードのプロセス中に利用可能な限り1つのデータエントリを解析できますか?

+0

これにはソースファイルとは別にExcelと関係がありますか? –

+0

@MarkFitzgerald、私は(Apache POIを使って)サーバー側で受信した後にコンテンツを解析する必要があります。私が自信を持っていないのは、Akka-Httpを使用しているときにバイトストリームの転送を処理するプロセスです。 – Bin

+0

Akka-HttpまたはScalaの知識のないExcelユーザーがこの質問にどのように答えてくれますか? –

答えて

2

他のファイルタイプではなく、Excelファイルに関して特別なものは何もありません。

すでにファイルと要求を取得するために応答するためのディレクティブが存在する

ファイルのディレクティブ:

import akka.http.scaladsl.server.Directives._ 
import java.io.File 
import akka.http.scaladsl.model.ContentTypes 

val easyRoute : Route = 
    getFromFile(File("/path/to/excelFile.xls"), 
       ContentTypes.`application/octet-stream`) 

手動作成を

あなたがのSourceを作成するためにfile ioを使用することができますChunkStreamPartとしてファイルを変換:

import akka.stream.scaladsl._ 
import akka.http.scaladsl.model.HttpEntity.ChunkStreamPart 

val excelFile = Paths get "example.xls" 

val fileChunkSource :() => Source[ChunkStreamPart, _] = 
() => FileIO fromPath excelFile 

このファイルソースは、HttpEntityを作成するために使用することができます。

その後、 HttpResponseのエンティティとすることができ
import akka.http.scaladsl.model.HttpEntity 

val entity :() => HttpEntity = 
() => HttpEntity(ContentTypes.`application/octet-stream`, fileSource()) 

import akka.http.scaladsl.model.HttpResponse 

val excelResponse :() => HttpResponse = 
() => HttpResponse(entity = entity()) 

この応答は、標準の一部にすることができますroute

val route = 
    get { 
    path(/ "excelFile") { 
     complete(excelResponse()) 
    } 
    } 
+0

'HttpEntity.apply'を直接使用することもできます。これは' ChunkStreamPart.apply'を経由するよりも少しシンプルです。 – jrudolph

+0

@jrudolph提案していただきありがとうございます。編集されました。 –

関連する問題