为什么我的图片不能在Laravel应用中显示?

时间:2017-06-02 15:50:30

标签: php html5 laravel filepath

我目前正在开发一个新的Laravel应用程序,并试图让用户能够将图像上传到本地服务器。出于此应用程序的目的,我将图像称为“媒体”。首先,这是我的media.create文件,允许用户上传图像:

<form method="POST" action="/media" class="form-signin" enctype="multipart/form-data">

    {{ csrf_field() }}

    <h2 class="form-signin-heading">Add Media</h2>

    <hr>

    <h2>Game Selector</h2>

    <select name="game_id">

        @foreach ($games as $game)

        <option name="game_id" value="{{ $game->id }}">{{ $game->opponent }} {{ $game->gdatetime }} {{ $game->season->year }}</option>

        @endforeach

    </select>


    <label for="inputMedia" class="sr-only">Media Name</label>
    <input type="text" name="file_name" class="form-control" placeholder="Media Name" required autofocus>

    <label for="inputMedia" class="sr-only">Content/Caption</label>
    <input type="text" name="content" class="form-control" placeholder="Caption/Content" required>

    <label for="inputMedia" class="sr-only">File</label>
    <input type="file" name="media_file" class="form-control" placeholder="File" required>

    <button class="btn btn-lg btn-primary btn-block" type="submit">Submit</button>
  </form>

这是将图像保存到服务器的MediaController商店功能

public function store() 
{

    //request()->file('media_file')->store('media');

    $media = Media::create(request(['game_id', 'file_name', 'content']));

    request()->file('media_file')->storeAs('media', $media->file_name.'.jpg', 'local');

    return redirect('/admin');

}

这一切都很好,花花公子。当我上传图片时,它会显示在我的storage/app/media文件夹中,但当我尝试在media.index视图中检索图片时,图片不会显示。这是我的media.index

@foreach ($medias as $media)

<div class="col-sm-12 col-lg-12">

<h1 class="media_content">
{{ $media->game->gdatetime->format('l F jS \\, Y') }} vs.
{{ $media->game->opponent }}
</h1>


<a href="#"><img src="{{asset('storage/app/media').'/'.$media->file_name.'.jpg'}}" alt="{{ $media->file_name }}" height="250" width="250"></a>

<p class="media_content">
{{ $media->content }}
</p>

</div>

@endforeach

为什么我的图片没有显示在media.index视图上?我认为它必须与文件路径有关,但我已经尝试了我能想到的每个组合都有意义,没有任何效果。

2 个答案:

答案 0 :(得分:0)

您无法从网络访问storage文件夹。永远无法访问storage/app/media。如果您正在使用公共磁盘(从storage/app/publicpublic/storage创建符号链接),请将图像存储到storage/app/public/media。现在可以从/public/storage/media访问图像。所以你的图像来源就是。

src="{{ asset("storage/media/{$media->file_name}.jpg") }}"

如果您不使用公共磁盘,请上传根public文件夹下的任意位置并相应地访问它。

公共磁盘上的文档https://laravel.com/docs/5.4/filesystem#the-public-disk

答案 1 :(得分:-1)

对于Laravel 5,在项目的根目录上打开终端并运行:

php artisan storage:link

这会在存储/应用公开文件夹之间创建一个链接。