Parse Server - Как удалить файл изображения с сервера, используя облачный код
Как я могу удалить файл изображения с сервера, используя Parse Cloud Code. Я использую back4app.com
После удаления строки изображения
Я получаю URL-адреса изображений, затем вызываю функцию для удаления изображения, используя его URL
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);
});
}
2 ответа
По соображениям безопасности невозможно напрямую удалить изображение из Back4App, используя DELETE из SDK или REST API. Я считаю, что вы можете следовать руководству ниже:
https://help.back4app.com/hc/en-us/articles/360002327652-How-to-delete-files-completely-
После некоторой борьбы с этим, похоже, это возможно с помощью облачной функции, как упоминалось здесь . В облачном коде нужно использовать 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-адреса после удаления файла с помощью функции облачного кода возвращает данные размером 0 КБ и, следовательно, подтверждает, что они были удалены.