[英]How do I download a file and send a file using Vapor server side swift?
我試過這個:
let result = try drop.client.get("http://dropcanvas.com/ir4ok/1")
但 result.body 總是 = 0 個元素
我試過這個
drop.get("theFile") { request in
let file = NSData(contentsOf: "/Users/bob.zip")
return file // This fails here
}
您在這里走在正確的軌道上,但是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
最好的方法是將您的文件保存在您的 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.