从自定义路由返回二进制文件(不是 FileMiddleware 的 public 文件夹)

Returning a binary file from a custom route (not FileMiddeleware's public folder)

我想 return 通过我不想要的路径 public 一个文件。我的用户将需要使用具有唯一且一次性代码的 URL。因此,我不想通过 FileMiddleware 使用 public 文件夹。

这是二进制可执行文件,不是文本文件。我可以使用 FileManager 将文件作为数据抓取,但似乎 Future<Data> 不是路由的有效 return 类型。

在搜索 Whosebug 之后,我唯一找到的是对类似问题的回复:

但这并没有真正说明如何完成它。

router.get("customfile") { req -> Future<Response> in
    return try req.streamFile(at: "/path/to/file")
}

这对我有用。

func routes(_ app: Application) throws {
  app.get("downloadthefile") { req -> Response in
    let filePath = "path/to/the/file"
    let result = req.fileio.streamFile(at: filePath)
    return result
  }
}