解析服务器 - 如何使用云代码从服务器删除图像文件

时间:2018-05-18 03:31:18

标签: parse-platform cloud-code back4app sparse-file

如何使用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);
        });
}

2 个答案:

答案 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数据,因此确认它们已被删除。