You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel大文件下载报错:路径正确却提示文件不存在

Laravel流式下载大文件提示文件不存在,但实际路径有效

我正在开发一个售卖大文件的电商网站,所有待下载文件的大小都超过500MB。为了提升安全性,我将所有文件存储在storage/app/academy目录下,并配置了如下磁盘:

'academy' => [
    'driver' => 'local',
    'root' => storage_path('app/academy'),
],

由于文件体积过大,直接使用Response::download会导致服务器内存占满宕机(两次下载后就出现问题)。我参考相关方案后,实现了流式下载的代码如下:

$fs = Storage::disk('academy')->getDriver();
$fileName = $file; //-> path to file
$metaData = $fs->getMetadata($fileName);
$stream = $fs->readStream($fileName);

if (ob_get_level()) ob_end_clean();

return response()->stream(
    function () use ($stream) {
        while(ob_end_flush());
        fpassthru($stream);
    },
    200,
    [
        'Content-Type' => $metaData['type'],
        'Content-disposition' => 'attachment; filename="' . $metaData['path'] . '"',
    ]
);

运行后却抛出了文件不存在的错误:

"File not found at path: D:/laragon/www/store/storage/app/academy/7FrggloHEjjc72rVJO1jPdF10nJL57MBMBvfwpYE.zip"

错误位于文件:

D:\laragon\www\store\vendor\league\flysystem\src\Filesystem.php Line 388

对应的代码片段是:

public function assertPresent($path) {
    if ($this->config->get('disable_asserts', false) === false && ! $this->has($path)) {
        throw new FileNotFoundException($path);
    }
}

奇怪的是,将报错中的路径复制到Windows资源管理器中,完全可以正常打开这个ZIP文件,说明路径是正确的!

我已经执行过php artisan storage:link命令,但问题依然存在,请问这是哪里出问题了?


内容的提问来源于stack exchange,提问作者Milad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:21:22