【发布时间】:2016-05-21 02:42:35
【问题描述】:
我使用 Parse.com 作为 iOS 应用程序的后端服务,我有一列将来自 Facebook 的个人资料图片存储为数组中的 URL。
像这样:
[
"https://z-1-scontent.xx.fbcdn.net/hp...e=5737C2D1",
"http://files.parsetfss.com/9b0a70...40906b-newProfilePic.png",
"http://files.parsetfss.com/9b0a70...24dd6-newProfilePic.png"
]
有时这些 URL 会过期(由于 Facebook 规则)并且不包含图像。互联网的其他方面也不建议存储这样的个人资料图片。
所以我想做的是制作一个 Parse Cloud Code Javascript,它通过从 URL 下载图像并将它们作为 Parse 文件保存在新列中的新数组中,从而将个人资料图片 URL 迁移到真实图像文件中。
这是我想做的:
- 在 Parse 中查询所有用户
- 获取他们的个人资料图片 URL
- 从每个 URL 下载图片
- 创建图像文件
- 将图像添加到新数组中
- 将该数组保存给用户
我希望这是有道理的。我创建了一个如下所示的 Cloud Code 函数:
Parse.Cloud.define("migrateColumn", function(request, response) {
Parse.Cloud.useMasterKey();
var usersToSave = [];
var profileImages = [];
var userQuery = new Parse.Query("User");
userQuery.find().then(function(users) {
for (var a = 0; a < users.length; a++) {
var user = users[a];
var profileURLs = user.get("profilePictures");
for (var b = 0; b < profileURLs.length; b++) {
var url = profileURLs[b];
Parse.Cloud.httpRequest({
url: url
}).then(function(httpResponse) {
var imageBuffer = httpResponse.buffer;
var base64 = imageBuffer.toString("base64");
var file = new Parse.File("userProfileImage.png", { base64: base64 });
profileImages.push(file);
});
}
user.set("profileImages", ["profileImage" + (a + 1)]);
usersToSave.push(user);
}
}).then(function() {
Parse.Object.saveAll(usersToSave, {
success: function() {
response.success("Success : " + profileImages);
}, error: function(error) {
response.error("An error occurred : " + error.message);
}
});
});
});
我知道httpRequest 是异步完成的,我需要以某种方式实现Promise,以等待所有图像完成下载。我没有足够的 Javascript 知识来自己构建它。感谢所有帮助。
【问题讨论】:
标签: javascript parse-platform cloud