gpt4 book ai didi

swift - 在 Vapor 4 中的文件流之后运行操作

转载 作者:行者123 更新时间:2023-12-03 17:22:33 28 4
gpt4 key购买 nike

我运行一个处理大文件(上传和下载)的网站。目前我正在将网站从 Perfect 过渡到 Vapor。在 Perfect 中,将文件流式传输给用户,然后在文件完成后执行一些操作相对简单。
我试图在 Vapor 中做同样的事情,但我似乎无法弄清楚如何在流完成时设置回调,以及当它完成时,它是否完全被用户下载或有中断。
有谁知道如何做到这一点?这是我尝试过的一些事情。
这是基本结构

func downloadFile(request: Request) -> EventLoopFuture<Response> {
//do some authentication stuff here

let promise = request.eventLoop.makePromise(of: Response.self)
let response = request.fileio.streamFile(at: "somePath")
promise.succeed(response)
let future = promise.futureResult
return future
}
第一次修改
func downloadFile(request: Request) -> EventLoopFuture<Response> {
//do some authentication stuff here

let promise = request.eventLoop.makePromise(of: Response.self)
let response = request.fileio.streamFile(at: "somePath")
promise.succeed(response)
let future = promise.futureResult

future.eventLoop.next().execute {
//run some post-download processing here.
//ideally I would like to know if the download completed or not.
}

return future
}
第二次修改
func downloadFile(request: Request) -> EventLoopFuture<Response> {
//do some authentication stuff here

let promise = request.eventLoop.makePromise(of: Response.self)
let response = request.fileio.streamFile(at: "somePath")
promise.succeed(response)
let future = promise.futureResult

future.whenComplete { result in
switch result {
case .succeed:
//run succeed processing here.
case .failure:
//run failure code here
}
}

return future
}
在上述所有情况下,所有处理都是立即完成的(可能是因为我们正在处理 future 和 promise ,并且一切都是异步的)。
我的问题是,在 Vapor 中有什么方法可以知道大文件何时完成流式传输以及流的结果是什么?也许是一些中间件?

最佳答案

从最近发布的 Vapor 开始,现在有一个可选的处理程序,您可以使用它来执行下载成功/失败的操作。

let response = request.fileio.streamFile(at: somepath) { result in
switch result {
case .success(): //do success processing
case .failure(let error): // do failure processing and can print(error)
}
}

关于swift - 在 Vapor 4 中的文件流之后运行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66359560/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com