Получить / прочитать laravel 5.8 Хранение непубличных папок Файлы для просмотра? - PullRequest
0 голосов
/ 02 апреля 2019

Попробуйте получить доступ к 'storage / app / folder1 / a.png' из моего представления

enter image description here

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>

результат: enter image description here

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

На это может быть много ответов!

Вы можете create a symbolic link from "public/storage" to "storage/app/public", используя следующую команду:

php artisan storage:link

Приведенная выше команда отобразит ваш каталог storage/app/public в каталог public.

Теперь давайте рассмотрим, есть ли у вас файлы user1.jpg и user2.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);
});

Вы можете в любом случае обезопасить маршрут выше и использовать его в своих представлениях ..

Я надеюсь, что это помогло ..

0 голосов
/ 02 апреля 2019

Перейти в config / filesystems добавить этот массив

'public_site' => [
            'driver' => 'local',
            'root' => public_path('storage'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ]

тогда ваша функция может быть такой

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

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