Я не могу загрузить загруженные изображения из подпапок в laravel - PullRequest
0 голосов
/ 14 октября 2019

Я пытался позволить пользователям загружать изображения на основе проектов в динамические подпапки. Они могут быть загружены, но они не могут быть получены в веб-интерфейсе. Кажется, что есть проблема с разрешением.

Это Laravel 5.8. Я пробовал через хранилище: ссылка, но пока не работает. Возможно, я делаю что-то не так.

Это моя функция Testupload, она хранит файлы, например, в: storage / app / 35 / image.jpg

public function store($file, $project){
        $filepath = $project->id.'/';
        if($file){
            Storage::disk('local')->put( $filepath .'/image.jpg', File::get($file));
        }
    }

Это мой маршрут:

Route::get('projectimage/{filename}', [
    'uses' => 'projectController@getProjectImage',
    'as' => 'getProjectImage'
]);

Вот мой шаблон Blade: Часть:

 @if (Storage::disk('local')->has($project->id.'/image.jpg'))
                    <img src="{{ route('getProjectImage', [$project->id.'/image.jpg'])}}" alt="">
@endif

Вот как получить изображения:

    public function getProjectImage($filename){
        $file = Storage::disk('local')->get($filename);
        return new Response($file, 200);
    }

Я не t change any config file, but I did php artisan storage: link`и попробовал это через «public» вместо «local». Это не сработало. Но это всегда работает без подпапок. Как я могу это исправить?

Я ожидаю получить изображения, отображаемые в FrontEnd. Полученная ссылка: src = "http://myproject.test/projectimage/35/image.jpg"

Теперь у меня есть странный момент ... если я жестко закодирую подпапку, она работает.

$file = Storage::disk('local')->get('60/'.$filename);

Мое решение:

шаблон лезвия:

@if (Storage::disk('local')->has($project->id.'/image.jpg'))
                    <img src="{{ route('getProjectImage',['filename'=>'image.jpg', 'projectid'=>$project->id])}}" alt="">
                @endif

контроллер:

    public function getProjectImage($filename, $project_id){

         $file = Storage::disk('local')->get($project_id.'/'.$filename);
        return new Response($file, 200);

    }

Не стесняйтесь улучшать мой код.: *

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Хорошо, похоже, что Laravel вроде не позволяет динамическим строковым входам на стороне просмотра извлекать данные сервера. Я решил это, добавив идентификатор проекта и имя изображения в качестве параметров через маршрут. Путь будет встроен в контроллер. Я обновлю свой пост.

0 голосов
/ 14 октября 2019

В функции "getProjectImage".

Не было бы лучше использовать "return response () -> file ($ pathToFile);"

Я оставляю здесь ссылку надокументация. https://laravel.com/docs/5.8/responses#file-responses

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...