使用 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

无法使用 Parse Server 和 Android 上传图像

将数据从Parse服务器获取到xcode

如何在Swift中调整图像大小?

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)