При попытке отобразить изображение с помощью тега (img src) путь к изображению сохраняется в моей базе данных. - PullRequest
0 голосов
/ 12 апреля 2019

Я успешно сохранил изображение, загружаемое пользователем, в поле с именем «image» в моей таблице «Advertising». Но у меня проблема с отображением изображения в моем файле вида (blade.php).

Я пытался найти решения в Интернете, но ни одно из них не помогло моему ...

Ниже приведен метод хранения моего рекламного контроллера: -

public function store(Request $request)
{
    // $media = Media::all();

    request()->validate([
        'image' => 'required',
        'image' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'
    ]);

    //find current admin's id
    $admin_user = auth()->id();

    if ($request->hasFile('image')) {
        $image = $request->file('image');
        $image_name = str_slug($request->title).'.'.$image->getClientOriginalExtension();
        $folderPath = public_path('/uploads/images');
        $imagePath = $folderPath. "/".  $image_name;
        $image->move($folderPath, $image_name);
    }

    $title = request('title');
    $description = request('description');
    $sort_num = request('sort_num');

    $media = Media::create([
        'title' => $title,
        'description' => $description,
        'sort' => $sort_num,
        'created_by' => $admin_user,
    ]);

    Advertisement::create([
        'image' => $imagePath,
        'expired_at' => Carbon::now()->format('Y-m-d H:i:s'),
        'media_id' => $media->id,
    ]);

    // return back()->with('success', 'Your advertisement has been successfully created!');
    return redirect('/advertisements');

}

Я могу успешно сохранить путь, но путь, который сохраняется, довольно длинный, например, : "/Users/hannzern/Desktop/numericledger-backend/public/uploads/images/klang-river.jpeg" и думал, что путь будет сохранен как "/public/uploads/images/klang-river.jpeg". Может ли это быть проблемой?

Ниже приведен код для моего представления (blade.php): -

<h1>Advertisements</h1>

<ul>
    @foreach ($advertisements as $advertisement)
        <a href="/advertisements/{{$advertisement->id}}">
            {{ $advertisement->media->title }}   
        </a>
        <br>

        //Three methods of retrieving the image from the path but all three not working
        <img src="{{ $advertisement->image }}" height="300" width="200">

        <img src="/Users/hannzern/Desktop/numericledger-backend/public/uploads/images/klang-river.jpeg" height="300" width="200">

        <img src="/public/uploads/images/klang-river.jpeg" height="300" width="200">

        <br>
        <br>
        <br>
        <br>
    @endforeach

</ul>

<a href="/advertisements/create">Add new advertisement</a>

Кроме того, из файловых каталогов я вижу изображение "klang-river.jpeg" в моей папке / public / uploads / images ... У кого-нибудь есть идеи, почему? (

1 Ответ

2 голосов
/ 12 апреля 2019

/public будет разрешено с помощью / в ссылках в браузере, поэтому ваша ссылка должна быть сохранена в базе данных как:

/Users/hannzern/Desktop/numericledger-backend/uploads/images/klang-river.jpeg

Однако, чтобы убедиться, что это работает везде, где выЕсли у вас есть приложение, вы не должны сохранять абсолютный путь.Сохраните в базу данных только следующее:

klang-river.jpeg

Затем, используя помощник asset () , вы можете вызвать правильный URL в своем шаблоне:

<img src="{{ asset('uploads/images/' . $advertisement->image) }}" height="300" width="200">

Это разрешит к ожидаемому URL.Надеюсь, это поможет.

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