加载并将PFFile保存到mongoDB

时间:2016-07-12 16:03:33

标签: swift xcode mongodb heroku parse-platform

我正在尝试从连接到Heroku上托管的Parse Server实例的MongoDB数据库中获取PFFile。

我保存了文件(文件< 10mb):

var post = PFObject(className: "Posts")
let imageData = UIImageJPEGRepresentation(UIImage(named: "post_two")!, 0.5)

post["picImage"] = PFFile(name: "post_two.jpg", data: imageData!)
post["username"] = "example"
post["title"] = "welcome"
post["info"] = "Thanks"

post.saveInBackgroundWithBlock { (success:Bool?, error:NSError?) in
                if (success != nil && success == true)
                {
                    print("post registred")
                }
                else{
                    print(error!.localizedDescription)
                }

            } 

然后我加载了帖子:

let elements = PFQuery(className: "Posts")
elements.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in
            if error ==  nil
            {


                for object in objects!
                {
                    //add found data to arrays (holders)

              let imagesQuery = object.valueForKey("picImage") as! PFFile
              picArray.append(imagesQuery)


                }


            }

            else
            {
                print((error?.localizedDescription)! + "load post")
            }

 })

问题在于:

picArray[i].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) -> Void in



            if error == nil
            {

                picImg.image = UIImage(data: data!)
            }
            else
            {

                print((error?.localizedDescription)!)
            }
        }

错误是:网络连接失败。睡眠后尝试4次为13.835050秒。 [错误]:不支持的网址(代码:100,版本:1.12.0)不支持的网址

在DEBUG中,getDataInBackgroundWithBlock中的数据是NiL。我不知道问题是文件存储,加载还是应用程序传输安全设置(在某些帖子中,有些建议包括例外域,那些我已经正确插入,但没有任何改变)。

非常感谢,我不知道在哪里找到解决方案

1 个答案:

答案 0 :(得分:0)

On Parse服务器文件以下列方式存储: [SERVER_URL] /文件/ [APP_ID] / [YOUR_FILE]

对于Parse"不支持的URL"对应于NSURLErrorUnsupportedURL。 我认为您的网址包含一些必须被转义百分比的字符。 因此,您的[APP_ID]或[YOUR_FILE]可以包含网址中不支持的字符。

RFC 3986定义的一般URI。 你可以在这里看到unreserved characters

您可以通过以下方式获取您的网址:

private var _BASE_REF = Firebase(url: "https://jokes-fbb87.firebaseio.com/")
private var _USER_REF = Firebase(url: "https://jokes-fbb87.firebaseio.com/users")
private var _JOKE_REF = Firebase(url: "https://jokes-fbb87.firebaseio.com/jokes")

如果您将此网址粘贴到网络浏览器中,它将为您逃脱。

尝试更改Heroku配置变量中的APP_ID。 并将其添加到AppDelegate.swift

使用旧的Swift 版本:

print(picArray[i].url)

使用 Swift 3

    let configuration = ParseClientConfiguration {
        $0.applicationId = "YOUR NEW APP ID"
        $0.server = "http://example.com/parse"
    }
    Parse.initializeWithConfiguration(configuration)

抱歉我的英语不好, 我希望我的回答很有帮助