Laravel-是否有返回视图和下载的方法


Laravel - Is there a way to return a view and download?

我试图找到一种方法,既可以返回视图,也可以调用下载函数。类似这样的东西:

return view('home')->download($filename, 'text.csv', $headers);

我认为这是不可能的。Laravel必须选择发送到浏览器的内容。如果它发送重定向标头,您将看不到该页面。

唯一的解决方案是渲染视图,并在视图中放置一个简单的javascript,如:

window.location.href = "<your file url>"

如果这是一个文件,它应该在不更改页面的情况下开始下载。

目前有一种使用流下载的方法。它不漂亮,但很管用。请注意,函数必须为echo,而不是return,因此在视图中调用render()

return response()->streamDownload(function() {
        echo view('home')->render();
    }
    , 'test.csv'
    , ['Content-Type' => 'text/csv']
);