Качете файл на 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
file:///var/mobile/Containers/ - 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 сървър, но сега искам да покажа лентата на прогреса за каченото изображение в swift iOS. - person Priyanka Dadhich; 10.10.2016