我正在开发一个使用脸谱图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)
想法?
答案 0 :(得分:4)
我现在遇到了这个完全相同的问题。出于某种原因,这个问题已经成为Google强大的结果,来自httprequest缓冲区的 parsefile !
文件的数据,如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
});