Swift 3 上传图片到解析服务器

Swift 3 upload image to Parse Server

我正在尝试使用 inf PFFile 将图像上传到 Parse Server。从 Parse Dashboard 手动上传它并从应用程序检索它没有问题。但是如果我尝试用这种方法上传一个新的,图像就不会更新。

其余字段正在正确上传(姓名、姓氏、用户名和电子邮件)

保存方式:

@IBAction func saveBtnPressed(_ sender: Any) {

    print("Start saving...")

    let imageData = UIImagePNGRepresentation(profilePic.image!)
    print ("imageData value:")
    print(imageData!)
    let imageFile = PFFile(name:"avatar.png", data:imageData!)
    print ("imageFile value:")
    print(imageFile!)

    let query = PFQuery(className: "_User")
    query.whereKey("username", equalTo: (PFUser.current()?.username)!)
    query.findObjectsInBackground(block: { (objects, error) in
    if let user = objects {
        for object in user {
            object["name"] = self.nameFld.text
            object["lastname"] = self.lastnameFld.text
            object["username"] = self.emailFld.text
            object["email"] = self.emailFld.text
            object["avatar"] = imageFile

            print(object)
            object.saveInBackground()
        }
    }
    })

}

输出:

Start saving...
imageData value:
8358983 bytes
(lldb)

要完成这项工作,您只需要先上传图片,然后将其引用给用户

let imageData = UIImagePNGRepresentation(profilePic.image!)
print ("imageData value:")
print(imageData!)
let imageFile = PFFile(name:"avatar.png", data:imageData!)
print ("imageFile value:")
print(imageFile!)

imageFile.saveInBackground { (result, error) in
    if let error = error{
        print(error)
    }else{
        let query = PFQuery(className: "_User")
        query.whereKey("username", equalTo (PFUser.current()?.username)!)
        query.findObjectsInBackground(block: { (objects, error) in
            if let user = objects {
                for object in user {
                    object["name"] = self.nameFld.text
                    object["lastname"] = self.lastnameFld.text
                    object["username"] = self.emailFld.text
                    object["email"] = self.emailFld.text
                    object["avatar"] = imageFile

                    print(object)
                    object.saveInBackground()
                }
            }
        })

    }
}
}

请注意,在上面的示例中,即使没有用户匹配查询,文件也会始终上传到服务器,因此请考虑仅在获得查询结果后才上传文件。

不需要查询当前用户。您可以按如下方式进行:

@IBAction func saveBtnPressed(_ sender: AnyObject) {
    let userToUpdate = PFUser.current()!

    userToUpdate["name"] = self.nameFld.text
    userToUpdate["email"] = self.emailFld.text
    userToUpdate["username"] = self.emailFld.text

    // Save Avatar
    if profilePic.image != nil {
        let imageData = UIImageJPEGRepresentation(profilePic.image!, 0.5)
        let imageFile = PFFile(name:"avatar.jpg", data:imageData!)
        userToUpdate["avatar"] = imageFile
    }

    // Saving block
    userToUpdate.saveInBackground(block: { (succ, error) in
        if error == nil {
            print("Your Profile has been updated!")
       } else {
            print("Failed")

    }})
}