我有一个akka actor,它会生成一堆文件,然后将它们拉上来,并返回该zip文件.我想然后将此文件传递回完整的喷涂路由方法,以允许下载zip文件.
我真的希望能够使用getFileFrom,但我似乎无法找到一种方法来利用它来回归未来.我也试过将文件传回完整的函数,但是得到了一个非常神秘的错误.
如何链接期货以获得我想要在浏览器中下载的结果?
这是我正在使用的一些代码
get {
path("test") {
respondWithMediaType(`application/zip`) {
complete {
val pi = new PackageInfo("Test")
doCreate(pi)
}
}
}
}
def doCreate(pi: PackageInfo) = {
val response = (worker ? Create(pi))
.mapTo[Ok]
.map(result => result.zipFile: File)
.recover { case _ => "error" }
response
}
Run Code Online (Sandbox Code Playgroud)
在尝试不同的事情时收到的许多错误之一
could not find implicit value for parameter marshaller: spray.httpx.marshalling.ToResponseMarshaller[scala.concurrent.Future[Comparable[_ >: java.io.File with String <: Comparable[_ >: java.io.File with String <: java.io.Serializable] with java.io.Serializable] with java.io.Serializable]]
Run Code Online (Sandbox Code Playgroud)
这里有几点需要解决.
一个是在创建该文件并将其发送到客户端后,您可能想要删除它.如果您只是使用getFromFile(doc)发送它,那么您将无法知道客户端何时完成下载文件并且无法删除该文件.以下是如何实现该功能:在Spray中完成请求处理后是否可以安装回调?.
缺少隐式的错误意味着Spray需要知道如何将数据封送回客户端.默认情况下,它只能编组字符串等基本类型,但您可以实现自己的自定义编组程序.如果您使用我提供的链接中描述的方法,那么您不必担心这一点.
最后,该答案还提供了一个分块响应,如果您的文件足够大,这个响应非常有用.
如果您决定继续getFromFile查看此答案:Spray将xls文件发送给客户端.我认为这正是你所需要的.
| 归档时间: |
|
| 查看次数: |
1288 次 |
| 最近记录: |