假如我有一个需要从客户端上传到服务器的excel文件(大小范围从0〜100MB),那么它会被解析。如何用Akka-Http做到这一点?我看了doc,看来他们只支持json和csv格式。Akka http读取并解析上传的excel文件
另外,从服务器端的角度来看,我是否必须在文件上传之后才解析文件,或者只要在上传过程中可用,我就可以一次解析一个数据条目?
假如我有一个需要从客户端上传到服务器的excel文件(大小范围从0〜100MB),那么它会被解析。如何用Akka-Http做到这一点?我看了doc,看来他们只支持json和csv格式。Akka http读取并解析上传的excel文件
另外,从服务器端的角度来看,我是否必须在文件上传之后才解析文件,或者只要在上传过程中可用,我就可以一次解析一个数据条目?
与任何其他文件类型相比,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())
}
}
您也可以直接使用'HttpEntity.apply',这比通过'ChunkStreamPart.apply'简单一点。 – jrudolph
@jrudolph谢谢你的建议。如此编辑。 –
这是什么使用Excel除了它是源文件吗? –
@MarkFitzgerald,我需要在服务器端收到内容后解析内容(使用Apache POI)。我不确定使用Akka-Http时处理字节流传输的过程。 – Bin
不知道Akka-Http或Scala的Excel用户如何回答此问题? –