Показать файл изображения в браузере после загрузки в базу данных laravel

У меня есть форма создания с некоторым полем, например; имя, цена, категория, ... и поле ввода для файла изображения.

это мой create.blade.php:

@extends('layouts.app')
@section('content')
    <div class = "container">

        <div class = "card mt-5">
            <div class = "card-body">
                <div class = "card-title">
                    create product
                </div>
            </div>
        </div>
        <form method = "post" action = "{{route('books.store')}}" enctype = "multipart/form-data">
            {{csrf_field()}}
            <div class = "form-group">
                <label for = "name">Name</label>
                <input type = "text" class = "form-control" name = "name" id = "name" aria-describedby = "emailHelp" value = "{{old('name')}}" placeholder = "Enter name">

            </div>
            <div class = "form-group">
                <label for = "pages">pages</label>
                <input type = "text" class = "form-control" id = "pages" name = "pages" value = "{{old('pages')}}" placeholder = "pages">
            </div>



            <div class = "form-group">
                <label for = "ISBN">ISBN</label>
                <input type = "text" class = "form-control" id = "ISBN" name = "ISBN" value = "{{old('ISBN')}}" placeholder = "ISBN">
            </div>


            <div class = "form-group">
                <label for = "price">price</label>
                <input type = "text" class = "form-control" id = "price" name = "price" value = "{{old('price')}}" placeholder = "price">
            </div>

            <div class = "form-group">
                <label for = "published_at">published_at</label>
                <input type = "date" class = "form-control" id = "published_at" name = "published_at" value = "{{old('published_at')}}" placeholder = "published_at">
            </div>

            <div class = "form-group">
                <label for = "published_at">انتخاب تصویر</label>
                <input type = "file" name = "file" id = "file">
            </div>

            <div class = "form-group">
                <label for = "category_id">CATEGORY ID</label>
                <select name = "category_id[]" class = "form-control" multiple>
                    @foreach($categories as $category)
                        <option value = "{{$category->id}}">
                            {{$category->name}}
                        </option>
                    @endforeach
                </select>
            </div>
            <div class = "form-group">
                <label for = "author_id"> Author</label>
                <select name = "author_id[]" class = "form-control" multiple>
                    @foreach($authors as $author)
                        <option value = "{{$author->id}}">
                            {{$author->name}}
                        </option>
                    @endforeach
                </select>
            </div>

            @if ($errors->any())
                <div class = "alert alert-danger">
                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif
            <button type = "submit" class = "btn btn-success">Submit</button>
        </form>
    </div>

@endsection

и это мой контроллер:

<?php

namespace App\Http\Controllers;

use App\author;
use App\book;
use App\category;
use App\File;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Storage;

class BookController extends Controller
{
    public $book;
    public $file;
    /**
    public function __construct()
    {
        $this->middleware('auth')->only('create');
    }
*/
    public function index()
    {
        $books = Book::with(['user'])->get();
        return view('books.index', compact('books'));

    }


    public function show($id)
    {
        $book = Book::with('categories','authors')->find($id);
        return view('books.show', compact('book'));
    }


    public function create()
    {
        $categories = Category::all();
        $authors = Author::all();
        $files= File::all();
        return view('books.create', compact('categories','authors','files'));
    }
    public function store(Request $request)
    {
        $this->validate($request,
            [
                'name'=>'required|string|max:256',
                'pages'=>'required|integer|numeric',
                'ISBN'=>'required|string|numeric',
                'price'=>'required|integer|numeric',
                'published_at'=>'required|date|date',
                'file'=>'required',

            ]
        );


        if ($request->hasFile('file')) {
            $filename = $request->file('file')->getClientOriginalName();
            $request->file->storeAs('public', $filename);
            $file = new File;
            $file->name = $filename;

            $file->save();

        }

        $book =  Auth::User()->books()->create($request->except('_token'));
        $book->categories()->attach($request->get('category_id'));
        $book->authors()->attach($request->get('author_id'));
        $book->files()->attach($request->get('book_id'));
        return redirect('/books');
    }

}


its web.php:

<!-- begin snippet: js hide: false console: true babel: false -->

и index.blade.php, где мы можем видеть поля в браузере:

@extends('layouts.app')
@section('content')


    <div class = "container">
        <table class = "table">
            <tr>
                <th>
                    Book Name
                </th>

                <th>
                    Creator
                </th>
            </tr>

            @foreach($books as $book)
                <tr>
                    <td><a href = {{"/books/".$book->id}}>{{$book->name}}</a></td>
                    <td>{{$book->user->name}}</td>
                    @can('update',$book)
                        <td><a href = "{{Route('books.edit',['id'=>$book->id])}}" class = "btn btn-primary">edit</a></td>

                        <!-- Button trigger modal -->
                 <td>      <button type = "button" class = "btn btn-danger" data-toggle = "modal" data-target = "#exampleModal">
                           delete
                        </button>
                 </td>

                  
                    @else
                        <td>

                        </td>
                    @endcan

                    <td>

                    </td>

                </tr>

            @endforeach
        </table>

        <div class = "mt-3"></div>
        <a href = "{{'/books/create'}}" class = "btn btn-success btn-block">Create</a>

    </div>


@endsection

весь мой код работает правильно, но мой вопрос в том, как я могу отобразить файл изображения в браузере? Я имею в виду; как можно использовать тег img в index.blade.php, чтобы это изображение отображалось в браузере? (Я не писал весь свой код, потому что он был бы слишком длинным, и мне просто нужен короткий код в теге img, примерно так:

'<img  src = "public/' . $file->getClientOriginalName() .'"  />';

но вы знаете, что это не работает с лезвием. Что я могу сделать?

был ли ваш путь к изображениям внутри public / images?

Christian Gallarmin 26.09.2018 18:20

@ChristianGallarmin нет в папке изображений и прямо в публичном доступе, я не делал папку публичной. как эта часть моего кода: $ request-> file-> storeAs ('public', $ filename);

Atefeh Rezakhah 26.09.2018 18:30

каков результат, когда вы dd ($ file-> getClientOriginalName ());

Christian Gallarmin 26.09.2018 18:35

Ваши изображения находятся в общей папке, попробуйте: <img src = "{{ asset('file_name.extention') }}" />

Gihan Lakshan 26.09.2018 18:42

@ChristianGallarmin Я получил эту ошибку: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: getClientOriginalName ()

Atefeh Rezakhah 26.09.2018 18:45

@GihanLakshan Я использовал ваш способ и не получил ошибки, но он не показывает изображения изображения: / возможно, у моего пути есть проблемы? Ха?

Atefeh Rezakhah 26.09.2018 18:50

@AtefehRezakhah, а где ваша функция getClientOriginalName ()?

Christian Gallarmin 26.09.2018 18:57

@ChristianGallarmin в UplodedFile.php: общедоступная функция getClientOriginalName () {return $ this-> originalName; }

Atefeh Rezakhah 26.09.2018 19:02

@AtefehRezakhah проверьте свой путь к изображению в браузере, просмотрев его источник, и убедитесь, что путь правильный

Gihan Lakshan 26.09.2018 19:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
9
4 193
1

Ответы 1

Вы можете получить путь к изображению, используя функции Laravel ресурсы() или url ().

Функция актив() генерирует URL для актива, используя текущую схему запроса (HTTP или HTTPS):

<img  src = "{{ asset('img/photo.jpg') }}">

Пример с asset ()

Функция url () генерирует полный URL-адрес для заданного пути:

<img  src = "{{ url('img/photo.jpg') }}">

Пример с url ()

Если ваш файл находится непосредственно в общей папке, чем должен быть ваш код,

<img  src = "{{ asset( $file->getClientOriginalName() ) }}"  >

Решение вашей проблемы с помощью asset ()

Пожалуйста, не используйте изображения в качестве ответов. Вместо этого вставьте соответствующий код

Marcin Nabiałek 26.09.2018 19:12

@BhavdipPambhar Я написал <img src = "{{asset ($ file-> getClientOriginalName ())}}" />, но получил эту ошибку: Undefined variable: file (View: C: \ wamp64 \ www \ blog \ shop \ resources \ views \ books \ index.blade.ph‌ p) - Atefeh Rezakhah только что редактировал

Atefeh Rezakhah 26.09.2018 19:15
$file Эта переменная существует в вашем файле лезвия?
Gihan Lakshan 26.09.2018 19:18

@AtefehRezakhah Определите вашу переменную. $ файл. Если вы используете другую переменную, используйте это имя вместо $ file.

Bhavdip Pambhar 26.09.2018 19:19

@ MarcinNabiałek Спасибо. На самом деле я понятия не имею, как добавить HTML с ответом. Итак, пытаюсь прикрепить изображение сюда, чтобы получить быстрый ответ на запрос Атефех Резаха. Теперь я сделал.

Bhavdip Pambhar 26.09.2018 19:22

@GihanLakshan Я определил $ file в контроллере, как я могу определить $ file в index.blade? Я использую другую переменную, например $ book, и у нее нет проблем (вы можете увидеть в моей треске). Что я должен делать?

Atefeh Rezakhah 26.09.2018 19:28
return view('books.index', compact('books', 'file'));
Gihan Lakshan 26.09.2018 19:34

@GihanLakshan я пишу return view ('books.index', compact ('books', 'file')); вместо return redirect ('/ books'); внутри публичного хранилища функций (), но получена ошибка: неопределенная переменная: книги

Atefeh Rezakhah 26.09.2018 20:12

В вашей функции магазина нет такой переменной, как $books, одна из них - $book, поэтому вы должны использовать ее как этот return view('books.index', compact('book', 'file'));

Gihan Lakshan 26.09.2018 20:29

Другие вопросы по теме