2017-02-26 79 views
0

假如我有一个需要从客户端上传到服务器的excel文件(大小范围从0〜100MB),那么它会被解析。如何用Akka-Http做到这一点?我看了doc,看来他们只支持json和csv格式。Akka http读取并解析上传的excel文件

另外,从服务器端的角度来看,我是否必须在文件上传之后才解析文件,或者只要在上传过程中可用,我就可以一次解析一个数据条目?

+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`) 

手动创建

您可以使用file io创建的一个Source excel文件作为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:

import akka.http.scaladsl.model.HttpEntity 

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

然后可以的HttpResponse实体:

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谢谢你的建议。如此编辑。 –