Изображения отказываются отображаться в Laravel

#php #laravel #image

#php #laravel #изображение

Вопрос:

У меня есть форма, которая позволяет пользователям загружать несколько изображений:

 <form method="post" action="/submitWorkOrder" id="work-order-form" enctype="multipart/form-data">
    {{ csrf_field() }}
    <div class="form-group">
        <label for="priority">Attach Image(s)</label>
        <input type="file" class="form-control" id="work-order-images" name="work-order-images[]" multiple/>
    </div>
</form>
  

И следующее в моем контроллере:

 public function submitWorkOrder(request $request) {
    
    $uniqueID = uniqid("wo-");
    $woStatus = "incomplete";
    $errors = 0;
    $errorString = "";

    if($request->hasFile('work-order-images')) {
        $allowedfileExtension=['pdf','jpg','png','gif','tif','bmp','svg','psd','eps'];
        $files = $request->file('work-order-images');

        foreach($files as $file){
            $filename = $file->getClientOriginalName();
            $extension = $file->getClientOriginalExtension();
            $check=in_array($extension,$allowedfileExtension);

            if($check) {
                $filename = $file->store('public');
                $image = new Image;
                $image->name = $filename;
                $image->parent_id = $uniqueID;
                $image->save();
            } else {
                $errors  ;
                $errorString = "Incorrect Image Type Uploaded.";
            }
        }
    }
    
    if ($errors == 0) {
        return redirect('/work-orders')->withSuccess("Work Order Successfully Created");
    } else {
        echo $errorString;
    }   
}
  

И, наконец, в моем шаблоне блейда у меня есть:

 @foreach($images as $image)
    <img src="{{asset('storage/app/'.$image->name)}}"/>
@endforeach
  

Когда я перехожу к URL-адресу с такой разметкой, он выдает поврежденное изображение с SRC:
http://127.0.0.1:8000/storage/app/public/l536mgPiNvjrAB15w41X2ka9CcGdkY8sNltEK9n1.png

Если я отправлю его на сервер, URL-адрес будет таким же, за исключением того, что вместо http://127.0.0.1:8000 , он заменяет его на текущий URL-адрес сайта.

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

Я также попробовал следующее:

  • Заменил {{asset(‘…’)}} на {{url(‘…’)}} в пути SRC изображения.
  • Пробовал использовать {{ storage_path }} / {{$image->name }} для пути SRC к изображению.
  • Я попытался запустить команду: php artisan хранилище: ссылка

На данный момент у меня нет идей. Путь кажется правильным. Изображение действительно существует на сервере. Просто, похоже, не хочет отображаться.

Есть мысли?

Комментарии:

1. Не могли бы вы попробовать сохранить изображение в общей папке, а не хранить в базе данных?

2. Ну, я делаю и то, и другое. Изображения загружаются в папку storage / app / public, но мне нужна запись о том, какие изображения были загружены с отправленным рабочим заданием. Существуют дополнительные сведения о форме, которые отправляются вместе с изображением. И так — мне нужен способ узнать, какие изображения принадлежат к какому порядку работы. Имеет ли это смысл?

3. Да, это так. Должен ли я предоставить свою логику, что я сделал в своем проекте? Сможете ли вы разобраться с этим?

4. Могу ли я посмотреть, как вы передаете изображения в блейд?

5. если вы использовали storage:link команду, то URL-адрес должен быть yoursite.test/storage/imagehere.png