Загрузить файл на FTP-сервер с помощью Swift

Я использую фреймворк 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")
    }
}

person matt    schedule 17.12.2015    source источник


Ответы (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")
    }
}
person O-mkar    schedule 17.12.2015
comment
Как преобразовать sPath в NSURL? Я пробовал let url = NSURL(fileURLWithPath: sPath), но получаю обычную ошибку: fatal error: unexpectedly found nil while unwrapping an Optional value - person matt; 17.12.2015
comment
Я ОБНОВИЛ ПОСТ - person O-mkar; 17.12.2015
comment
Если вы нашли пост полезным, не забудьте проголосовать и принять :) - person O-mkar; 17.12.2015
comment
Спасибо! хотя я пробовал все параметры NSURL(...) и всегда вылетает при развертывании необязательного значения... если путь начинается с /var/mobile/Containers/ или file:///var/mobile/Containers/ - person matt; 17.12.2015
comment
файл:///var/мобильный/Контейнеры/ - person O-mkar; 17.12.2015
comment
Если вы обновите полный код, где вы получаете ошибку, я могу это исправить :) - person O-mkar; 17.12.2015
comment
всегда вы ставите точки останова, чтобы понять, где вы ошибаетесь - person O-mkar; 17.12.2015
comment
Давайте продолжим это обсуждение в чате. - person O-mkar; 17.12.2015
comment
Вы были правы все это время, ваш обновленный код работал как шарм - person matt; 17.12.2015
comment
Я использовал rebekka для загрузки изображения на FTP-сервер, но теперь я хочу показать progressBar для загруженного изображения в быстрой iOS. - person Priyanka Dadhich; 10.10.2016