首页 > 解决方案 > 获取/读取 laravel 5.8 存储非公共文件夹文件以查看?

问题描述

尝试从我的视图访问“storage/app/folder1/a.png”

在此处输入图像描述

public function viewStorageFiles()
{
    $fileFullPath = Storage::disk('local')->path('folder1/a.png');
    $fileUrl = Storage::disk('local')->url('app/folder1/a.png');
    $storage_path = storage_path('app/folder1/a.png');

    return view('email.fileDownload')->with([
        'fileFullPath' => $fileFullPath,
        'fileUrl' => $fileUrl,
        'storage_path' => $storage_path,
        ]);
}

在视图中:email.fileDownload

<div>
    <p>  asset($fileUrl) ==> {{asset($fileUrl)}}</p>
    <img src="{{asset($fileUrl)}}"/>
</div>
<div>
    <p>  url($fileUrl) ==> {{url($fileUrl)}}</p>
    <img src="{{url($fileUrl)}}"/>
</div>
<div>
    <p>  storage_path($fileUrl) ==> {{storage_path($fileUrl)}}</p>
    <img src="{{storage_path($fileUrl)}}"/>
</div>

结果是:在此处输入图像描述

标签: phplaravellaravel-5laravel-storage

解决方案


这个问题可能有很多答案!

您可以create a symbolic link from "public/storage" to "storage/app/public"使用以下命令:

php artisan storage:link

上面的命令会将您的目录映射storage/app/publicpublic目录。

现在让我们考虑您的目录中有user1.jpguser2.jpg文件storage/app/public,您可以通过以下方式访问它们:

http://your-domain.com/storage/user1.jpg
http://your-domain.com/storage/user2.jpg

*根据您的评论更新了我的答案:*

您可以从受某些中间件保护的路由返回文件响应!

例如 - 以下路由从storage/app/uploads无法公开访问的目录返回文件响应:

Route::get('storage/{file}', function ($file) {
    $path = storage_path('app' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $file);
    return response()->file($path);
});

无论如何,您都可以保护上述路线并在您的视图中使用它..

我希望这有帮助..


推荐阅读