PFUser.current()?. saveInBackground ERROR with UIImage()

时间:2018-02-07 18:57:36

标签: ios json swift parse-platform

我想将UIImage中的图像保存为PFFile。但后来我收到了错误:

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.}

正如您将在片段中看到的那样,我打印了图像的数据,我得到了一些内容。 如果我将图像的设置评论给当前用户,一切正常(显然没有图像)。

知道在哪里看?

@IBAction func updateProfil(_ sender: Any) {
        PFUser.current()!["isFemale"] = genderSwitch.isOn

        if let image = profilImage.image {
            print(image)
            if let data = UIImagePNGRepresentation(image) {
                print(data)
                PFUser.current()!["image"] = PFFile(name: "profile.png", data: data)
                PFUser.current()?.saveInBackground(block: { (s, e) in
                    if e != nil {
                        print(e as Any)
                        self.getErrorFromServer(errServeur: e, errMessage: "Update Failed")
                    } else {
                        self.showSuccessMessage(m: "Info uploaded")
                        print("Data Saved !")

                        self.performSegue(withIdentifier: "updatedProfile", sender: nil)
                    }
                })
            }
        }
    }

print(image)print(data)分别给我:

<UIImage: 0x6080000a8580> size {1200, 704} orientation 0 scale 1.000000
1411255 bytes

1 个答案:

答案 0 :(得分:2)

通常这是由于您的文件大小而发生的。解析服务器配置选项之一是 maxUploadSize 。默认值为20MB表示您无法上传大于20MB的文件。您可以在解析服务器配置中将此值覆盖为100MB(除非您处理的是非常大的文件,如:视频等)

我认为最适合您的解决方案是在将图像上传到解析服务器之前压缩图像。压缩图像会大大减小其尺寸并保持其质量(因为JPEG压缩),因此在上传图像之前,您需要执行以下操作:

    let data = UIImageJPEGRepresentation(image, 0.5)
    let f = PFFile(data: data, contentType: "image/jpeg")

0.5是质量,它的最大值是1,但是如果你将它设置为0.5或甚至0.4,你将获得非常好的结果。此外,您可以通过缩小图像来压缩图像。这也会大大减小它的大小,但它实际上取决于你的用例。

增加解析服务器端的大小应如下所示:

var server = ParseServer({
  ...otherOptions,
  // Set the max upload size of files
  maxUploadSize: 100MB,
  ....
});

祝你好运