Cloud Code:从URL创建Parse.File

时间:2015-11-15 21:29:30

标签: parse-platform cloud-code

我正在开发一个使用脸谱图API检索用户个人资料图片的云代码功能。所以我可以访问正确的图片网址,但是我无法通过此网址创建Parse.File。

这正是我正在尝试的事情:

    Parse.Cloud.httpRequest({
        url: httpResponse.data["attending"]["data"][key]["picture"]["data"]["url"],
        success: function(httpImgFile) 
        {
            var imgFile = new Parse.File("file", httpImgFile);                                             
            fbPerson.set("profilePicture", imgFile); 
        },
        error: function(httpResponse) 
        {
            console.log("unsuccessful http request");
        }
    });

它返回以下内容:

Result: TypeError: Cannot create a Parse.File with that data.
    at new e (Parse.js:13:25175)
    at Object.Parse.Cloud.httpRequest.success (main.js:57:26)
    at Object.<anonymous> (<anonymous>:842:19)

想法?

1 个答案:

答案 0 :(得分:4)

我现在遇到了这个完全相同的问题。出于某种原因,这个问题已经成为Google强大的结果,来自httprequest缓冲区的 parsefile

Parse.File documentation

  

文件的数据,如1.一个字节值数字的数组,或2.像{base64:“...”}这样的对象,带有base64编码的字符串。 3.使用文件上载控件选择的File对象。 (3)仅适用于Firefox 3.6 +,Safari 6.0.2 +,Chrome 7+和IE 10 +。

我相信CloudCode最简单的解决方案是 2 。之前绊倒我的是我没注意到它希望Object格式为{ base64: {{your base64 encoded data here}} }

此外,Parse.File只能在保存后设置为Parse.Object(此行为也存在于所有客户端SDK上)。我强烈建议使用API​​的Promise版本,因为它可以更容易地组成这样的异步操作。

因此以下代码将解决您的问题:

Parse.Cloud.httpRequest({...}).then(function (httpImgFile) {
    var data = {
        base64: httpImgFile.buffer.toString('base64')
    };
    var file = new Parse.File("file", data);
    return file.save();
}).then(function (file) {
  fbPerson.set("profilePicture", file);
  return fbPerson.save();
}).then(function (fbPerson) {
  // fbPerson is saved with the image
});