这是我的情况:我的用户附有个人资料照片。在移动设备上,当用户注册时,他们的配置文件图像被设置为默认图像,并且他们有机会更改它。无论他们是否这样做,无论配置文件图像设置为什么图像,我们都会创建一个解析文件对象并将其附加到用户。
我们的网站开发人员为其中一位用户提供了网址'默认配置文件图片,并为没有选择图片的所有注册用户使用相同的文件。
在某些时候,他使用的原件被删除了。不确定何时/如何,但该图片现在的链接进入"访问被拒绝"页。它是一个parsefile网址,而不是外部网址,所以我不确定那里发生了什么。
无论如何,我创建了一个后台作业,找到了所有破坏了网址的用户。现在我想给他们一个指向他们自己的url的唯一解析文件。我知道我可以将文件添加到我的云代码部署中,但是我不知道如何访问它来创建我需要在云代码中生成Parse.File对象的字节值数组。
我的问题归结为:我在哪里存储图像文件,以便我可以在我的云代码中访问它,以及如何从该图像文件创建一个字节值数组?
这就是我希望我的代码看起来像什么。任何帮助填补缺少的步骤将不胜感激:
Parse.Cloud.job("fixBrokenProfilePics", function( request, status )
{
Parse.Cloud.useMasterKey();
//The BrokenProfilePic object only contains a pointer to a user that has the broken profile pic link as it's ProfilePicture field
var brokeProfilePicQuery = new Parse.Query("BrokenProfilePic");
brokenProfilePicQuery.include("User");
brokenProfilePicQuery.each
(
function( brokenProfilePic )
{
var user = brokenProfilePic.get("User");
//****MISSING STEPS*****
var image = ???? //Get the image file
var byteArray = ???? //Get byte array from the image file
var imageName = "ProfilePic" + user.id;
var imageFile = new Parse.File(imageName, byteArray);
return imageFile.save().then
(
function( imageFile )
{
user.set("ProfilePicture", imageFile);
return user.save().then
(
function( user ){}, //Don't need to do anything
function( error )
{
var promise = new Parse.Promise();
return promise.reject("There was an error trying to save the user: " + error.message);
}
);
},
function( error )
{
var promise = new Parse.Promise();
return promise.reject("There was an error trying to save the parse file: " + error.message);
}
);
}
).then
(
function( results )
{
status.success("Updated the ProfilePics");
},
function( error )
{
status.error("There was an error trying to update the profile pics: " + error.message);
}
);
});
编辑 - 我发现这个问题似乎是同一个问题:https://parse.com/questions/access-denied-on-images-request-failed-forbidden-403
看起来它是由使用Parse的清理文件功能引起的,虽然据说只有当你的文件在一个数组中或者作为一个字符串保存在一个对象上时才会发生(弱引用)而不是存储在Parse File列(强引用)中,我的是。我不确定为什么我会遇到这个问题。
答案 0 :(得分:0)
不要,只修复原件,不要有相应文件的数百或数千份副本。并记下不要删除该文件。