【发布时间】:2018-07-31 16:13:28
【问题描述】:
我有一个由 webfaction 托管的服务器,我希望能够通过 FTP 或 SFTP 从我的应用程序发送一个 csv 文件。我发现了许多可以提供帮助的库,例如 ConnectionKit、NMSSH、DLSFPT 和 LxFTPRequest。然而,它们都在objective-c中而不是swift,这使得它们很难在Swift 4中阅读、理解和实现。我试图实现LXFTPRequest,因为我找到了一个快速的上传实现,这是我的代码:
let fileName = "user-data.csv"
guard let path = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first else {fatalError(ErrorMessageStrings.couldntAccessDocs.rawValue)}
let fileURL = path.appendingPathComponent(fileName)
let folderLocation = "/home/path/"
let uploadUrl = URL(string: "ftp://server-name.webfaction.com" + folderLocation)
let request = LxFTPRequest.upload()
request?.serverURL = uploadUrl
request?.localFileURL = fileURL
request?.username = "username"
request?.password = "password"
request?.successAction = { (resultClass, result) in
print("File uploaded")
}
request?.failAction = { (domain, error, errorMessage) in
print(error)
print(errorMessage?.description)
fatalError("Connection could not be made. Action was not completed.")
}
request?.progressAction = {(_ totalSize: Int, _ finishedSize: Int, _ finishedPercent: CGFloat) -> Void in
print(finishedPercent)
}
request?.start()`
使用它,我几乎可以让它工作,但最终出现 550 错误“未采取请求的操作。文件不可用(例如,找不到文件,无法访问)。”浏览 webfaction 文档,我觉得我只能通过 SFTP 发送文件,这个框架不支持。
文档说“要使用 FTP 连接(仅适用于 shell 用户),请将连接类型替换为 FTP,端口号替换为 21。”我假设因为我从我的应用程序发送数据,所以它不算是 shell 用户,所以 FTP 不授予我访问权限(我可能在这里错了)。如果是这种情况,我将如何使用其他库使用 Swift 而不是 Objective-c 通过 SFTP 发送我的文件?
【问题讨论】:
-
FTP 不是 SFTP。
-
是的,我知道我在最后做出了区分。我将进行编辑,以免第一句话造成混淆。
-
看来你真正的问题是如何在 Swift 中进行 SFTP,而你所有基于 FTP 的代码和你关于它如何工作的叙述都是无关紧要的。你做过研究吗?谷歌搜索“swift sftp”似乎会产生一些有用的点击。
标签: swift file-upload sftp webfaction