загрузка изображения на FTP-сервер в swift - PullRequest
0 голосов
/ 25 апреля 2019

Привет всем, я пытаюсь загрузить изображение на FTP-сервер с помощью приложения для iOS в swift.

Я использовал приведенную ниже библиотеку. FileProvider

Проблема, с которой я сталкиваюсь, заключается в том, что файл, загружаемый на сервер, имеет нулевой размер в байтах.

Я проверил приведенные ниже вопросы, но не смог решить свою проблему.

  1. первый
  2. второй
  3. третий

это код, который я написал.

var ftpProvider: FTPFileProvider?


override func viewDidLoad() {
    super.viewDidLoad()

    let server: URL = URL(string: "ftp://x.x.x.x/")!
    let username = "xxxxx"
    let password = "xxxxxxx"

    let credential = URLCredential(user: username, password: password, persistence: .forSession)

    ftpProvider = FTPFileProvider(baseURL: server, mode: FTPFileProvider.Mode.passive, credential: credential, cache: URLCache())

    ftpProvider!.delegate = self

}



 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    guard let chosenImage = info[UIImagePickerControllerOriginalImage] as? UIImage else{
        print("RIZK:- issue in picking images ")
        return
    }

    // saving the image as a file fileName.png
    _ = SavingManager.shared.saveImage(image: chosenImage)

    // getting the local url of the image file
    guard let localURL = SavingManager.shared.getSavedImageURL("fileName.png") else{
        return
    }

    //just to check if the image is being returned successfully 
    guard  let imagePreview = SavingManager.shared.getSavedImage(named: "fileName.png") else{
        return
    }

    //getting the file size 
    SavingManager.shared.getFileSize(localURL.path)

    //naming the file 
    let imageName = "\(DataManager.shared.getArchivedUser()?.lastName ?? "Guest")-\(Int(Date().timeIntervalSince1970)).png"

    //uploading the image 
    let progress = ftpProvider?.copyItem(localFile: localURL, to: "files/\(imageName)", overwrite: true, completionHandler: { (error) in
        if error == nil {
            print("RIZK:-- Ready to upload")
        }else{
            print("RIZK:--\(error?.localizedDescription ?? "")")
        }
    })

    print(progress?.fractionCompleted ?? 0)



    self.navigationController?.dismiss(animated:true, completion: nil)
}

Я также добавил методы делегатов, но они вообще не доступны,

пожалуйста, если кто-нибудь использовал эту библиотеку, предоставьте помощь.

спасибо

1 Ответ

1 голос
/ 25 апреля 2019

Пожалуйста, не используйте FTP для чего-либо , которое обращено наружу / доступно из Интернета. Любой может перехватить пароль и войти на ваш сервер.

Если вы хотите использовать что-то , например FTP, используйте SFTP или FTPS.

Но ваше приложение не должно использовать ни один из них. Поскольку я (как пользователь) могу получить ваш .ipa, отладить / разобрать его, извлечь из него жестко запрограммированные учетные данные и получить доступ к вашему серверу, загрузить и удалить все, что мне нравится. Вам нужно предоставить конечную точку API, которая принимает загрузку файла и помещает файл куда-нибудь. Вы не должны делиться своими учетными данными ftp с чем-либо, что клиент получает в свои руки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...