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
相关产品推荐
相关产品推荐

