Swi*_*ern 1 sftp file-upload webfaction swift
我有一个由 webfaction 托管的服务器,我希望能够通过 FTP 或 SFTP 从我的应用程序发送 csv 文件。我发现许多应该有帮助的库,例如ConnectionKit、NMSSH、DLSFPT和LxFTPRequest。然而,它们都在 Objective-C 中而不是 Swift 中,这使得它们很难在 Swift 4 中阅读、理解和实现。自从我找到了上传的 Swift 实现以来,我尝试实现 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()`
Run Code Online (Sandbox Code Playgroud)
使用这个我几乎让它工作,但我最终得到了 550 错误“未采取请求的操作。文件不可用(例如,找不到文件,无法访问)。” 通过查看 webfaction 文档,我感觉我只能通过 SFTP 发送文件,而这个框架不支持。
该文档说“要使用 FTP 连接(仅适用于 shell 用户),请将连接类型替换为 FTP,将端口号替换为 21。” 我假设因为我从我的应用程序发送数据,所以它不被视为 shell 用户,因此 FTP 不会授予我访问权限(我在这里可能是错的)。如果是这种情况,我将如何使用其他库使用 Swift 而不是 Objective-C 通过 SFTP 发送我的文件?
我最终使用了 NMSSH 并在 Swift 中使用它,它并没有我想象的那么复杂。
let session = NMSSHSession.init(host: serverHost, port: xx, andUsername: serverUsername)
session.connect()
if session.isConnected{
session.authenticate(byPassword: serverPasswordString)
if session.isAuthorized == true {
let sftpsession = NMSFTP(session: session)
sftpsession.connect()
if sftpsession.isConnected {
sftpsession.writeFile(atPath: csvFileURL.path, toFileAtPath: folderLocation)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |