首页 > 解决方案 > Laravel下载大文件最终找不到

问题描述

我正在开发一个用于销售文件和所有下载文件或超过 500Mb 的电子商务网站。所以为了获得更多保护,我将所有文件存储在存储文件夹中并像这样创建磁盘

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

所以我认为所有文件大小都超过 500Mb 所以我不能简单地使用Responce::download (两次下载后===服务器关闭内存填满)

所以我在 StackOverflow 中搜索并找到答案#1#2所以我使用此代码下载文件:

$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'] . '"',
    ]);

并在运行后收到此错误

“在路径中找不到文件:D:/laragon/www/store/storage/app/academy/7FrggloHEjjc72rVJO1jPdF10nJL57MBMBvfwpYE.zip”

在这个文件上

D:\laragon\www\store\vendor\league\flysystem\src\Filesystem.php 第 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

标签: phplaravellaravel-5filesystemsstorage

解决方案


我不知道我对 laravel 框架中存储的了解是错误还是湖:

当您通过存储保存文件时将返回文件的路径,因此我将该路径保存在我的数据库中,当我将此路径提供给上面的代码时返回该错误,所以我决定只发送没有路径的文件名并简单地代码作品。

我希望这个答案对某人有所帮助!


推荐阅读