【问题标题】:Retrieving data via sftp with NMSSH in Swift在 Swift 中使用 NMSSH 通过 sftp 检索数据
【发布时间】:2020-05-07 21:19:48
【问题描述】:

我正在尝试将 JSON 文件从我的服务器获取到我的 iPhone。我正在为我的 FTP 连接使用 NMSSH,并且连接正常。

但我无法从我的服务器检索任何数据。不管我使用什么路径~///someFolder/someFolder。每次,我都会收到错误消息:

NMSSH_Test[] NMSSH: 无法在路径 /testDirectory 打开文件(错误 0: )

这是我的代码:

class Data {
    init() {
        let session = NMSSHSession.init(host: "someIp", andUsername: "user")
        session.connect()
        if session.isConnected{
            session.authenticate(byPassword: "password")
            if session.isAuthorized {
                let sftpsession = NMSFTP(session : session)
                sftpsession.contents(atPath: "/testDirectory")
//                if (sftpsession.contentsOfDirectory(atPath: "~/") != nil) {
//                    print("Found Data!")
//                }
            }
        }
    }
}

【问题讨论】:

  • 连接没有问题。我也可以将数据发送到我的服务器。
  • 如何检查每个 if 的 else 分支上的错误情况?
  • 找到了解决方案。我还必须对我创建的 sftpsession 变量使用 .connect()。所以如果我正确的话,我必须使用它两次。它有效!
  • 如果你成功了,你介意发布一个带有几个解释的答案,以便有同样问题的人也可以解决它吗?

标签: swift ftp sftp nmssh


【解决方案1】:

试试下面的代码:

let session = NMSSHSession(host: serverHost, port: portNo, andUsername: serverUsername)
session.connect()
if session.isConnected{
         let privateKeypath:String = Bundle.main.path(forResource: "mykey", ofType: "")!
         let privateKey: String = try! String(contentsOfFile: privateKeypath, encoding: String.Encoding.utf8)
                
         session.authenticateBy(inMemoryPublicKey: "", privateKey: privateKey, andPassword: passwordStr)
                
         if session.isAuthorized == true {
                let sftpsession = NMSFTP(session: session)
                sftpsession.connect()
                if sftpsession.isConnected {
                     print("download session is connected")
                }
                else {
                     print("Error: download session not connected")
                return
                }
                guard let directoryContents = downloadSession.contentsOfDirectory(atPath: "Your Directory Path goes here!")
                else {
                     print("Unable to read contents of file in SSH site")
                return
                }
                print("Data at specified path captured: " + directoryContents)
                 
                guard let contentList = downloadSession.contents(atPath:  "Enter your path here!")
                else {
                     print("Unable to read contents of file in SSH site")
                return
                }
                print("Printing Contents of file at path")
                print(contentList)             
                }
            }
       }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多