如何在 Laravel 中使用 filepond 发送 DELETE 请求?

How to send DELETE request with filepond in Laravel?

FilePond 可以使用 POST 请求类型上传文件,因此在 Laravel 中没问题。但是,FilePond 在 reverting/removing 上传 file/s 时发送 DELETE 请求。 Laravel 不直接支持 DELETE 请求,而是使用带有 DELETE 值的 _method 字段作为 POST 请求发送。

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

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

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

'_method': 'DELETE'

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

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

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

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

由于Laravel无法确定这是一个删除请求,它将被处理为POST请求,因此您必须执行检查以查看是否有DELETE字段传入 header,像这样:

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

相关作品: