Scala Akka http读取和解析上传的excel文件
比方说,如果我有一个excel文件(大小范围从0到100MB),需要从客户端上传到服务器,那么它将被解析。如何使用Akka Http实现这一点?我看了,他们似乎只支持json和csv格式Scala Akka http读取和解析上传的excel文件,scala,akka-http,Scala,Akka Http,比方说,如果我有一个excel文件(大小范围从0到100MB),需要从客户端上传到服务器,那么它将被解析。如何使用Akka Http实现这一点?我看了,他们似乎只支持json和csv格式 此外,从服务器端的角度来看,我是否必须在上传文件后才对其进行解析,或者我可以一次解析一个数据条目,只要它在上传过程中可用?excel文件与任何其他文件类型相比没有什么特殊之处 文件指令 已存在使用文件响应get请求的指令: import akka.http.scaladsl.server.Directives.
此外,从服务器端的角度来看,我是否必须在上传文件后才对其进行解析,或者我可以一次解析一个数据条目,只要它在上传过程中可用?excel文件与任何其他文件类型相比没有什么特殊之处 文件指令 已存在使用文件响应get请求的指令:
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`)
手动创建
您可以使用创建excel文件的源
,作为块流部分
:
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())
此响应可以是标准的一部分:
与任何其他文件类型相比,excel文件没有什么特殊之处 文件指令 已存在使用文件响应get请求的指令:
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`)
手动创建
您可以使用创建excel文件的源
,作为块流部分
:
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())
此响应可以是标准的一部分:
您还可以使用
HttpEntity.apply
直接应用,这比使用ChunkStreamPart.apply
稍微简单。您还可以使用HttpEntity.apply
直接应用,这比使用ChunkStreamPart.apply稍微简单。这与Excel有什么关系,除了它是源代码之外file?@MarkFitzgerald,我需要在服务器端接收后解析内容(使用Apache POI)。我不确定的是使用Akka-Http时处理字节流传输的过程。一个不了解Akka Http或Scala的Excel用户如何回答这个问题?这与Excel除了作为源文件之外还有什么关系?@MarkFitzgerald,我需要在服务器端接收后解析内容(使用Apache POI)。我不确定的是使用Akka-Http时处理字节流传输的过程。一个不了解Akka Http或Scala的Excel用户如何回答这个问题?