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")
}})
}
我正在尝试使用 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")
}})
}