首页 > 解决方案 > 如何在 Laravel 中使用 filepond 发送 DELETE 请求?

问题描述

FilePond 可以使用 POST 请求类型上传文件,这在 Laravel 中很好。但是,FilePond 在恢复/删除上传的文件时会发送 DELETE 请求。Laravel 不直接支持 DELETE 请求,而是使用带有 DELETE 值的 _method 字段作为 POST 请求发送。

因此,现在我正在发出 POST 删除请求,但似乎无法弄清楚如何在 FilePond 中将数据添加到我的恢复请求中。我的选项如下所示:

FilePond.setOptions({
    server: {
        ...
        revert: {
            url: '/filepond',
            method: 'POST',
            headers: {
                'X-CSRF-TOKEN': csrf_token
            }
        }
        ...
    }
});

Laravel 所需的数据(要在 POST 请求中添加的数据不是在标头中,而是在表单数据中)。

'_method': 'DELETE'

标签: laravelfilepond

解决方案


经过数小时的研究,我仍然找不到合适的解决方案。这是因为 Laravel 不直接处理 DELETE 请求,而是要求在 POST 请求中将一个字段作为 _method 传递,其中包含 DELETE 值。

FilePound 确实支持发送 POST 请求,但不允许发送数据,例如此场景中所需的 _method 字段。

我的解决方案是添加一个标头字段(FilePond 支持)并将请求类型作为标头字段添加,如下所示:

FilePond.setOptions({
    server: {
        process: {
            ....
        },
        revert: {
            url: '{{ route('your-route') }}',
            method: 'POST',
            headers: {
                'X-CSRF-TOKEN': csrf_token,
                '_method': 'DELETE'
            }
        }
    }
});

由于 Laravel 无法确定这是一个删除请求,它将作为 POST 请求处理,因此您必须执行检查以查看标头中是否传递了 DELETE 字段,如下所示:

public function store(Request $request)
{
    if ($request->header("-method") == "DELETE") {
        echo "File deleted";
    } else {
        echo "File uploaded";
    }
}

相关作品:


推荐阅读