【问题标题】:Upload file to FTP server with Swift使用 Swift 将文件上传到 FTP 服务器
【发布时间】:2015-12-17 13:32:04
【问题描述】:

我正在使用框架 RebekkaTouch 将文件从我的 Swift 应用程序上传到 FTP 服务器,就像:

if let URL = NSBundle.mainBundle().URLForResource("myFile", withExtension: "txt") {
    let path = "myFile.txt"
    session.upload(URL, path: path) {
        (result, error) -> Void in
        print("result:\n\(result), error: \(error)\n\n")
    }
}

这非常适合我通过 Xcode 手动上传的文件。但是我似乎无法找到我在Documents目录上动态下载并本地存储的文件的文件路径。

说,我知道我有这个文件:/private/var/mobile/Containers/Data/Application/3D92EA55-01E0/Documents/SomeFile.txt

我知道它在那里,因为我在循环通过 NSFileManager.defaultManager() 后获得了路径,但我无法将其转换为 NSURL,所以我可以上传它。

有什么想法吗?

////更新

这是死亡的地方:

let file = "myFile.txt"
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
    //path will be stored here
    let sPath = dir.stringByAppendingPathComponent(file);
    print(sPath) //  printing the file path

    let url: NSURL = NSURL(string: sPath)!

    let destinationFile = "myFile.txt"
    FTPSession.upload(url, path: destinationFile) { // <-- Dies here
        (result, error) -> Void in
        print("- Result:\n\(result), error: \(error)\n\n")
    }
}

【问题讨论】:

    标签: swift ftp nsurl


    【解决方案1】:

    这是一个例子

    此代码在 Swift 2.0 上经过全面测试

     let file = "SomeFile.txt"
            if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
               //path will be stored here
                let sPath = dir.stringByAppendingPathComponent(file);
    
          print(sPath) //  printing the file path
            }
    

    你可以执行上传

    在关于将字符串转换为 NSURL 的评论中按要求进行编辑

    let URL: NSURL = NSURL(string: stringofURL)! //replace stringofURL to sPath
    

    更新了您的代码

    let file = "myFile.txt"
    if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
        //path will be stored here
        let sPath = dir.stringByAppendingPathComponent(file);
        print(sPath) //  printing the file path
    
        let url: NSURL = NSURL(string: sPath)!
    
        let destinationFile = "myFile.txt"
        session.upload(url, path: destinationFile) { // here was the error it should be session not FTPsession
            (result, error) -> Void in
            print("- Result:\n\(result), error: \(error)\n\n")
        }
    }
    

    【讨论】:

    • 如何将sPath 转换为NSURL?我试过let url = NSURL(fileURLWithPath: sPath),但我得到了通常的错误:fatal error: unexpectedly found nil while unwrapping an Optional value
    • 我已经更新了帖子
    • 如果你觉得这篇文章有用,别忘了点赞和接受:)
    • 谢谢!虽然我已经尝试了所有 NSURL(...) 选项并且在展开可选值时总是崩溃......路径应该以 /var/mobile/Containers/file:///var/mobile/Containers/ 开头
    • file:///var/mobile/Containers/
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2016-01-07
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多