使用 Swift 3 上传和图像到 Parse Server 失败:“JSON 文本不是以数组或对象开头”
Posted
技术标签:
【中文标题】使用 Swift 3 上传和图像到 Parse Server 失败:“JSON 文本不是以数组或对象开头”【英文标题】:Upload and image with Swift 3 to Parse Server failing: "JSON text did not start with array or object" 【发布时间】:2017-02-27 13:49:02 【问题描述】:我正在尝试将图像上传到 Parse Server,我得到以下输出:
Error Domain=NSCocoaErrorDomain Code=3840
"JSON text did not start with array or object and option to allow fragments not set."
UserInfo=NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.
我尝试上传不同大小的文件,我认为这不是大小或服务器限制的问题。我也尝试像这样声明变量 imageFile 但它再次显示相同的消息:
let imageFile = PFFile(data:imageData!, contentType: "image/png")
如果我直接从 Parse Dasboard UI 上传一个文件,它工作得很好,我可以检索它。那么我很确定这不是服务器问题。
环境:
斯威夫特: 3
解析版本: 2.3.1
使用 Docker + Docker Dashboard 安装。
上传方式:
@IBAction func saveBtnPressed(_ sender: Any)
let imageData = UIImagePNGRepresentation(profilePic.image!)
print(imageData!)
let imageFile = PFFile(name:"avatar.png", data:imageData!)
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()
)
输出:
1596088 bytes
<PFFile: 0x60000044db30>
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo=NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.
【问题讨论】:
正确严格的JSON
需要顶层的数组([]
)或对象(
)。其他值无效。您可以获取raw response
并将其添加到问题中吗?
@user28434 我如何得到这个原始响应?我不确定你是否正在努力实现..
可以使用PFFile
对象来完成。我相信this Parse guide on 会对你有所帮助。你也可以参考这个sample code。快乐编码:)
【参考方案1】:
试试这个:
let currentUser = PFUser.current()!
currentUser["name"] = self.nameFld.text
currentUser["lastname"] = self.lastnameFld.text
currentUser["username"] = self.emailFld.text
currentUser["email"] = self.emailFld.text
let imageData = UIImagePNGRepresentation(profilePic.image!)
let imageFile = PFFile(name:"avatar.png", data:imageData!)
currentUser["avatar"] = imageFile
// Saving block
currentUser.saveInBackground (success, error) -> Void in
if error == nil
// add action
else
// add action
【讨论】:
以上是关于使用 Swift 3 上传和图像到 Parse Server 失败:“JSON 文本不是以数组或对象开头”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 2.0 在 Parse.com (REST API) 中上传图像并将其与用户关联
从 Parse (Swift) 中检索图像到 imageView