我目前正在开发一个新的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
视图上?我认为它必须与文件路径有关,但我已经尝试了我能想到的每个组合都有意义,没有任何效果。
答案 0 :(得分:0)
您无法从网络访问storage
文件夹。永远无法访问storage/app/media
。如果您正在使用公共磁盘(从storage/app/public
到public/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
这会在存储/应用和公开文件夹之间创建一个链接。