3

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

2 回答 2

1

出于安全原因,不能使用 SDK 或 REST API 中的 DELETE 直接从 Back4App 中删除图像。我相信您可以按照以下指南进行操作:

https://help.back4app.com/hc/en-us/articles/360002327652-How-to-delete-files-completely-

于 2018-05-18T10:45:34.047 回答
0

在为此苦苦挣扎了一段时间之后,似乎可以通过此处提到的云功能来实现。需要在云代码中使用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数据,因此确认它们已被删除。

于 2021-05-22T13:13:08.150 回答