如何使用Parse Cloud Code从服务器删除图像文件。我正在使用back4app.com
我正在获取图片网址,然后调用函数以使用其网址删除图片
Parse.Cloud.afterDelete("Image", function(request) {
// get urls
var imageUrl = request.object.get("image").url();
var thumbUrl = request.object.get("thumb").url();
if(imageUrl!=null){
//delete
deleteFile(imageUrl);
}
if(thumbUrl!=null){
//delete
deleteFile(thumbUrl);
}
});
function deleteFile(url){
Parse.Cloud.httpRequest({
url: url.substring(url.lastIndexOf("/")+1),
method: 'DELETE',
headers: {
'X-Parse-Application-Id': 'xxx',
'X-Parse-Master-Key': 'xxx'
}
}).then(function(httpResponse) {
console.log(httpResponse.text);
}, function(httpResponse) {
console.error('Request failed with response code ' + httpResponse.status);
});
}
答案 0 :(得分:0)
出于安全原因,使用来自SDK或REST API的DELETE直接从Back4App中删除图像是不可行的。我相信您可以遵循以下指南:
https://help.back4app.com/hc/en-us/articles/360002327652-How-to-delete-files-completely-
答案 1 :(得分:0)
在为此苦苦挣扎了一段时间后,似乎可以通过上述 here 的云功能实现。一需要在云代码中使用MasterKey:
Parse.Cloud.define('deleteGalleryPicture', async (request) => {
const {image_id} = request.params;
const Gallery = Parse.Object.extend('Gallery');
const query = new Parse.Query(Gallery);
try {
const Image = await query.get(image_id);
const picture = Image.get('picture');
await picture.destroy({useMasterKey: true});
await Image.destroy();
return 'Image removed.';
} catch (error) {
console.log(error);
throw new Error('Error deleting image');
}
});
对我来说,首先感到困惑,因为即使在我删除仪表板中的引用对象后我也可以打开指向该文件的链接,但后来我发现仪表板由于某种原因没有调用 Parse.Cloud.beforeDelete()
触发器。
尝试通过云代码功能删除文件后从url下载数据返回0kB数据,因此确认它们已被删除。