Laravel nova 操作下载文件原因:失败 - 没有文件

Laravel nova action download a file causes : Failed - no file

我想创建一个文件并在 Laravel 操作期间下载它。

我使用以下代码:

    public function handle(ActionFields $fields, Collection $models)
    {
        Storage::disk('local')->put('file.txt', 'example');
        $url = Storage::disk('local')->url('file.txt');
        return Action::download($url, 'file.txt');
    }

这会导致以下错误:

Failed - no file

我做错了什么?

不确定该错误消息的来源,但可能是以下问题。调用 return Action::download($url, 'file.txt') laravel nova 将指示浏览器在给定的 url 下载文件。如前所述 here 这个 url 将(取决于您的配置)可能是相对的 url /storage/file.txt。因此浏览器将尝试下载可能不存在的 http(s)://domain/storage/file.txt。上面提到的文档对此有一个解决方案。

如果您甚至不想创建一个可能需要清理和保护的文件(如果数据是敏感的),您也可以将 url 指向一个路由并在控制器中进行处理。