快速上传图片到FTP服务器

时间:2019-04-25 11:51:23

标签: ios swift ftp

大家好,我正在尝试使用iOS应用迅速将图像上传到FTP服务器。

我使用了以下库。 FileProvider

我面临的问题是上传到服务器的文件的字节数为零。

我检查了以下问题,但无法解决我的问题。

  1. first
  2. second
  3. third

这是我编写的代码。

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 个答案:

答案 0 :(得分:1)

请不要将FTP用于 的任何外部接口,也可以通过Internet访问。任何人都可以拦截密码并进入您的服务器。

如果您要使用类似 的FTP,请使用SFTP或FTPS。

但是,您的应用不应使用这两种方法。因为我(作为某些用户)可以获取您的.ipa,所以请对其进行调试/反汇编,然后从中检索硬编码的凭据并访问您的服务器,然后上传和删除我喜欢的任何内容。您需要提供一个API端点,该端点可以接受文件上传并将文件放置在某处。您不得与客户得到的任何东西共享ftp凭据。