swift - 快速使用 SFTP 发送 CSV 文件

标签 swift file-upload sftp webfaction

我有一个由 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 发送我的文件?

最佳答案

我最终使用了 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)
            }
        }
    }

关于swift - 快速使用 SFTP 发送 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51617805/

相关文章:

python - 使用fastapi上传文件

Python Paramiko 目录遍历 SFTP

ios - 在 swift 中发送 PUT 请求正文

ios - 使用导航 Controller 在 Storyboard 中呈现 View Controller - Swift

iOS:设备旋转后如何运行功能(Swift)

java - Selenium WebDriver - 无法使用 AutoIT 上传文件

ios - 无法将 UIView 类型的值转换为 UIButton

ajax - ASP.NET MVC Ajax 使用 jquery 表单插件上传文件?

sql-server - SQL Server 执行 xp_cmdshell 通过 FTP 协议(protocol)从 UNIX 机器导入文本文件

c - 如何使用 libcurl 在 sftp 中下载整个目录