3
  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
}
4

2 回答 2

3
  1. 下载一个文件。

您在这里走在正确的轨道上,但是result.body始终为空的原因是因为您的文件服务正在返回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目录中,让您的客户端直接请求公共 URL,或者返回302您自己指向它的响应。

如果您明确想要隐藏文件的永久主页或例如执行身份验证,那么您可以使用 Vapor 自己的FileMiddleware作为指南从您自己的路线返回文件。

于 2017-02-01T08:07:36.223 回答
1

文件也可以在经过身份验证的路由上返回,如下所示:

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)
}
于 2020-02-03T21:31:34.390 回答