如何使用 Vapor 服务器端 swift 下载文件和发送文件?

How do I download a file and send a file using Vapor server side swift?

  1. 如何使用服务器端下载文件 swift?

我试过这个:

let result = try drop.client.get("http://dropcanvas.com/ir4ok/1")

但 result.body 总是 = 0 个元素

  1. 如何发送文件?

我试过了

drop.get("theFile") { request in 
   let file = NSData(contentsOf: "/Users/bob.zip")
   return file // This fails here
}
  1. 下载文件。

您在这里的方向是正确的,但是 result.body 始终为空的原因是因为您的文件服务 return 正在 302 重定向而不是文件本身。您需要遵循此重定向。这是一个简单的实现,仅针对您的用例,有效:

  var url: String = "http://dropcanvas.com/ir4ok/1"
  var result: Response!
  while true {
    result = try drop.client.get(url)
    guard result.status == .found else { break }
    url = result.headers["Location"]!
  }
  let body = result.body
  1. 发送文件。

最好的方法是将文件保存在 Vapor 应用程序的 Public 目录中,然后让您的客户直接请求 public URL,或者 return 302 你自己指向它的回应。

如果您明确想要隐藏文件的永久位置或例如执行身份验证,然后您可以使用 Vapor 自己的 FileMiddleware 作为指南,从您自己的路径 return 文件。

文件也可以像这样在经过身份验证的路由上返回:

let fileId: String = "abcd123"

func getFile(on req: Request) throws -> Future<Response> {
    let directory = try req.make(DirectoryConfig.self)
    let path = directory.workDir + Constants.filesPath + fileId + ".pdf"

    return try req.streamFile(at: path)
}