Laravel 在图像上返回 404
Laravel returning a 404 on an image
这应该相当简单,尽管它完全难倒了我。
我在 localhost:8000
上有一个后端 Laravel 安装 运行
我在 localhost:9001 上有一个前端 Angular 应用 运行。
我有一些 'static' 图像已包含在我的种子数据中(例如
'1','user.png'),这些图像在我的前端完美呈现(它们也从我上传图像的确切位置提供)。
我目前提供的 URL 图片来自 http://localhost:8000/images/{filename}
我可以从前端上传图像到后端,它们出现在数据库中,图像被放入文件系统,我在我的前端填充正确的 URL(证明由前面的 URL).
我上传的图片没有显示。
在我的日志中我得到:
[2015-01-20 18:13:49] local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg [] []
[2015-01-20 18:13:49] local.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException'
我在我的路由文件中尝试了一种方法,但当我已经在提供一些图像时,我不明白为什么?
我还在我的 /images 文件夹上将所有权限设置为 755。
有什么想法吗?
我不确定我是否遵循了您正在进行的每一个多系统交互,但我会回到最初的 HTTP 原则。
尝试直接访问图像 URL。
http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
如果您的浏览器(或您的日志,如果您没有将 debug
设置为 true
进行开发)中的错误是
local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
这意味着您的网络服务器无法在 images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
找到文件,并将请求传递给 Laravel。这意味着您需要弄清楚为什么您的网络服务器看不到该文件。
假设您从 public
文件夹
提供 index.php
你有 public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
文件吗?
你确定吗?将路径复制并粘贴到终端和 ls public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
以确保您的大脑没有遗漏一些细微的案例问题
您的 Web 服务器的日志(不是 Laravel 的)是否出现任何错误
你能在图像文件夹中创建一个 text/html 文件并提供吗?如果不是,那么您可能没有将 Web 服务器指向您认为的文件夹。
类似于
http://localhost:8000/images/test.txt
http://localhost:8000/images/test.html
像这样进行调试的一些基本原则应该能为您指明正确的方向。
问题是您还没有为上传的图片生成 url
尝试像这样访问您的url
http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
生成上面的url
在您的 controller.This 方法中添加此方法 \Storage::disk('public')->url();
方法访问在 Config\filesystems.php
中找到的 public
磁盘阵列,并在中生成一个 url以下格式
http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
例如下面的方法将图片存储在图片文件夹中并生成图片路径url。
public function uploadImage(Request $request)
{
$request->validate(['image'=>'file|image|max:5000']);
$imageProfile = new ImageProfile();
if($request->hasFile('image') && $request->file('image')->isValid())
{
$image = $request->file('image')->store('images');
$imageProfile->image_profile_url = \Storage::disk('public')->url($image);
$imageProfile->save()
}
return response()->json($imageProfile,200);
}
下面的代码returns Json 回复
{
"id": 13,
"image_profile_url ": "http://127.0.0.1:8000/storage/images/cxlogqdI8aodERsmw74nmEx7BkxkWrnyJLMH7sFj.jpeg",
"updated_at": "2020-01-13 16:27:37",
"created_at": "2020-01-13 16:27:37",
}
尝试复制 url 并在 postman 中测试它。
访问 link 以了解有关 Laravel 文件存储的更多信息
Laravel File Storage
希望对您有所帮助。
laravel 8
控制器功能
public function store(Request $request)
{
$this->validate($request, [
'site_title' => 'required',
'logo_image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$input['logo_image'] = time().'.'.$request->logo_image->getClientOriginalExtension();
$request->logo_image->move(public_path('images'), $input['logo_image']);
$input['site_title'] = $request->site_title;
//dd($input);
Site_settings::create($input);
return back()->with('success','Image Uploaded successfully.');
}
blade 查看
<td>
<img src="{{ url('/images/').'/'.$site_settings->logo_image ?? '' }}" alt="" width="250px" height="auto">
</td>
rm public/storage
php artisan optimize:clear
php artisan storage:link
这对我有用。
这应该相当简单,尽管它完全难倒了我。
我在 localhost:8000
上有一个后端 Laravel 安装 运行我在 localhost:9001 上有一个前端 Angular 应用 运行。
我有一些 'static' 图像已包含在我的种子数据中(例如 '1','user.png'),这些图像在我的前端完美呈现(它们也从我上传图像的确切位置提供)。
我目前提供的 URL 图片来自 http://localhost:8000/images/{filename}
我可以从前端上传图像到后端,它们出现在数据库中,图像被放入文件系统,我在我的前端填充正确的 URL(证明由前面的 URL).
我上传的图片没有显示。
在我的日志中我得到:
[2015-01-20 18:13:49] local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg [] []
[2015-01-20 18:13:49] local.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException'
我在我的路由文件中尝试了一种方法,但当我已经在提供一些图像时,我不明白为什么?
我还在我的 /images 文件夹上将所有权限设置为 755。
有什么想法吗?
我不确定我是否遵循了您正在进行的每一个多系统交互,但我会回到最初的 HTTP 原则。
尝试直接访问图像 URL。
http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
如果您的浏览器(或您的日志,如果您没有将 debug
设置为 true
进行开发)中的错误是
local.ERROR: NotFoundHttpException Route: http://localhost:8000/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
这意味着您的网络服务器无法在 images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
找到文件,并将请求传递给 Laravel。这意味着您需要弄清楚为什么您的网络服务器看不到该文件。
假设您从 public
文件夹
index.php
你有
public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
文件吗?你确定吗?将路径复制并粘贴到终端和
ls public/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
以确保您的大脑没有遗漏一些细微的案例问题您的 Web 服务器的日志(不是 Laravel 的)是否出现任何错误
你能在图像文件夹中创建一个 text/html 文件并提供吗?如果不是,那么您可能没有将 Web 服务器指向您认为的文件夹。
类似于
http://localhost:8000/images/test.txt
http://localhost:8000/images/test.html
像这样进行调试的一些基本原则应该能为您指明正确的方向。
问题是您还没有为上传的图片生成 url
尝试像这样访问您的url
http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
生成上面的url
在您的 controller.This 方法中添加此方法 \Storage::disk('public')->url();
方法访问在 Config\filesystems.php
中找到的 public
磁盘阵列,并在中生成一个 url以下格式
http://localhost:8000/storage/images/j249ae747ce28c317e02f1fb6d0a10c3.jpg
例如下面的方法将图片存储在图片文件夹中并生成图片路径url。
public function uploadImage(Request $request)
{
$request->validate(['image'=>'file|image|max:5000']);
$imageProfile = new ImageProfile();
if($request->hasFile('image') && $request->file('image')->isValid())
{
$image = $request->file('image')->store('images');
$imageProfile->image_profile_url = \Storage::disk('public')->url($image);
$imageProfile->save()
}
return response()->json($imageProfile,200);
}
下面的代码returns Json 回复
{
"id": 13,
"image_profile_url ": "http://127.0.0.1:8000/storage/images/cxlogqdI8aodERsmw74nmEx7BkxkWrnyJLMH7sFj.jpeg",
"updated_at": "2020-01-13 16:27:37",
"created_at": "2020-01-13 16:27:37",
}
尝试复制 url 并在 postman 中测试它。
访问 link 以了解有关 Laravel 文件存储的更多信息 Laravel File Storage
希望对您有所帮助。
laravel 8
控制器功能
public function store(Request $request)
{
$this->validate($request, [
'site_title' => 'required',
'logo_image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$input['logo_image'] = time().'.'.$request->logo_image->getClientOriginalExtension();
$request->logo_image->move(public_path('images'), $input['logo_image']);
$input['site_title'] = $request->site_title;
//dd($input);
Site_settings::create($input);
return back()->with('success','Image Uploaded successfully.');
}
blade 查看
<td>
<img src="{{ url('/images/').'/'.$site_settings->logo_image ?? '' }}" alt="" width="250px" height="auto">
</td>
rm public/storage
php artisan optimize:clear
php artisan storage:link
这对我有用。