Laravel 5.4 显示上传图片问题
Laravel 5.4 show uploaded image issue
我正在学习 Laravel 5.4
,现在我正在尝试上传图片并在 html
中显示上传的图片。
好像文件上传成功了,但是当我想显示Html
中的图片时,图片出现404错误,什么也不会显示。
这是我的设置和代码:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|string|max:255',
'desc' => 'required|string',
'width' => 'required|numeric',
'height'=> 'required|numeric',
'artist'=> 'required|exists:artists,id',
'photo' => 'required|file'
]);
$artistInfo = Artist::find($request->artist);
$fileExtension = $request->file('photo')->extension();
$originalFileName = $request->file('photo')->getClientOriginalName();
$filePath = Storage::putFile('public', $request->file('photo'), 'public');
Photo::create([
'name' => $request->name,
'origName' => $originalFileName,
'url' => $filePath,
'artist_id' => $request->artist,
'desc' => $request->desc,
'width' => $request->width,
'height' => $request->height
]);
return $filePath;//this for test
}
还有我的Blade:
@forelse($photos as $photo)
<tr>
<td>{{ $photo->name }}</td>
<td>
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
<td>{{ $photo->artist->name . ' ' . $photo->artist->family }}</td>
<td>{{ $photo->desc }}</td>
<td>{{ $photo->width }}</td>
<td>{{ $photo->height }}</td>
<td class="text-center">
<a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
<i class="material-icons">edit</i>
</a>
</td>
<td class="text-center">
<a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
<i class="material-icons">assignment_turned_in</i>
</a>
</td>
</tr>
@empty
<tr>
<td>There's no photo Yet</td>
<td>—</td>
<td>—</td>
<td>—</td>
<td>—</td>
</tr>
@endforelse
注意:
我使用 php artisan storage:link
为我的 public 文件夹创建了一个符号 link,symlink 工作正常...
我在 blade 中更改了这一行:
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
并尝试了这些方式:
<img class="img" src="{{ asset(storage_path() . ($photo->url)) }}" alt="{{ $photo->name }}" /></td>
<img class="img" src="{{ storage_path() . ($photo->url) }}" alt="{{ $photo->name }}" /></td>
$photo->url
有图像文件名,例如 jDHPOTh7iejFABANSzasNbBWJ09DqLbqJb8ymJhv.png
你能告诉我我的问题是哪一部分吗?
提前致谢
更新:
我正在使用 PhpStorm
Ide,当我将我的 public 文件夹下载到我的项目时 - 或者同步这个 - 我的符号 link 没有出现在 public文件夹列表...
这是我的 public 文件夹中的 ls
:
这是我的 phpStorm 项目视图 在 下载我主机中 public 文件夹的新副本:
作为注释:
我最初是在 windows 开始开发这个网站,然后我将整个项目移动到我的 linux 远程服务器...
我认为问题出在这里:
$filePath = Storage::putFile('public', $request->file('photo'), 'public');
此处您将文件放在 public
文件夹中,此处:
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
您正在尝试从 public/storage/
获取它。所以像这样改变路径:
<img class="img" src="{{ asset( 'public/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
然后重试。
注意:这里上传的图片路径存储在public/image.extension
,所以从同一个public
目录中获取它
任何寻找此问题答案的人,请关注此link包含很好的答案
感谢大家的参与,但我遇到了一个棘手的问题...
我使用 root
登录到我的服务器,当我输入 php artisan storage:link
时,符号 link 是由 root
作为 owner
并且 Apache 似乎没有访问此符号 link 的权限,因此,无法访问 http
.
中的文件
解决方案
我有一个为 5 个不同网站提供服务的 vds,所以
我只是简单地将符号 link 的所有者更改为我的相对用户名,问题就解决了...
chown -R usergroup:username /path/to/link
就是这样...
我正在学习 Laravel 5.4
,现在我正在尝试上传图片并在 html
中显示上传的图片。
好像文件上传成功了,但是当我想显示Html
中的图片时,图片出现404错误,什么也不会显示。
这是我的设置和代码:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|string|max:255',
'desc' => 'required|string',
'width' => 'required|numeric',
'height'=> 'required|numeric',
'artist'=> 'required|exists:artists,id',
'photo' => 'required|file'
]);
$artistInfo = Artist::find($request->artist);
$fileExtension = $request->file('photo')->extension();
$originalFileName = $request->file('photo')->getClientOriginalName();
$filePath = Storage::putFile('public', $request->file('photo'), 'public');
Photo::create([
'name' => $request->name,
'origName' => $originalFileName,
'url' => $filePath,
'artist_id' => $request->artist,
'desc' => $request->desc,
'width' => $request->width,
'height' => $request->height
]);
return $filePath;//this for test
}
还有我的Blade:
@forelse($photos as $photo)
<tr>
<td>{{ $photo->name }}</td>
<td>
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
<td>{{ $photo->artist->name . ' ' . $photo->artist->family }}</td>
<td>{{ $photo->desc }}</td>
<td>{{ $photo->width }}</td>
<td>{{ $photo->height }}</td>
<td class="text-center">
<a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
<i class="material-icons">edit</i>
</a>
</td>
<td class="text-center">
<a href="{{ route('artists.edit', ['id' => $photo->id]) }}">
<i class="material-icons">assignment_turned_in</i>
</a>
</td>
</tr>
@empty
<tr>
<td>There's no photo Yet</td>
<td>—</td>
<td>—</td>
<td>—</td>
<td>—</td>
</tr>
@endforelse
注意:
我使用 php artisan storage:link
为我的 public 文件夹创建了一个符号 link,symlink 工作正常...
我在 blade 中更改了这一行:
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
并尝试了这些方式:
<img class="img" src="{{ asset(storage_path() . ($photo->url)) }}" alt="{{ $photo->name }}" /></td>
<img class="img" src="{{ storage_path() . ($photo->url) }}" alt="{{ $photo->name }}" /></td>
$photo->url
有图像文件名,例如 jDHPOTh7iejFABANSzasNbBWJ09DqLbqJb8ymJhv.png
你能告诉我我的问题是哪一部分吗?
提前致谢
更新:
我正在使用 PhpStorm
Ide,当我将我的 public 文件夹下载到我的项目时 - 或者同步这个 - 我的符号 link 没有出现在 public文件夹列表...
这是我的 public 文件夹中的 ls
:
这是我的 phpStorm 项目视图 在 下载我主机中 public 文件夹的新副本:
作为注释: 我最初是在 windows 开始开发这个网站,然后我将整个项目移动到我的 linux 远程服务器...
我认为问题出在这里:
$filePath = Storage::putFile('public', $request->file('photo'), 'public');
此处您将文件放在 public
文件夹中,此处:
<img class="img" src="{{ asset( 'public/storage/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
您正在尝试从 public/storage/
获取它。所以像这样改变路径:
<img class="img" src="{{ asset( 'public/' . $photo->url) }}" alt="{{ $photo->name }}" /></td>
然后重试。
注意:这里上传的图片路径存储在public/image.extension
,所以从同一个public
目录中获取它
任何寻找此问题答案的人,请关注此link包含很好的答案
感谢大家的参与,但我遇到了一个棘手的问题...
我使用 root
登录到我的服务器,当我输入 php artisan storage:link
时,符号 link 是由 root
作为 owner
并且 Apache 似乎没有访问此符号 link 的权限,因此,无法访问 http
.
解决方案
我有一个为 5 个不同网站提供服务的 vds,所以 我只是简单地将符号 link 的所有者更改为我的相对用户名,问题就解决了...
chown -R usergroup:username /path/to/link
就是这样...