【问题标题】:Parse Server - How to delete image file from the server using cloud codeParse Server - 如何使用云代码从服务器中删除图像文件
【发布时间】:2018-05-18 03:31:17
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。所以,简而言之。他们说我必须 1- 更新对象并将文件列值更改为 null。 2-删除行。 3- 从仪表板清理...
    • 嘿,不客气!是的,您描述了删除文件的正确过程:)
    【解决方案2】:

    经过一段时间的努力,似乎可以通过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数据,因此确认已删除。

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多