簡體   English   中英

如何使用 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始終為空的原因是因為您的文件服務返回的是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作為指南從您自己的路徑返回文件。

文件也可以在經過身份驗證的路由上返回,如下所示:

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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM