如何解决 Laravel 8 上的图片添加问题?
How can I solve an image add issue on Laravel 8?
我的 Laravel8 项目有问题。
在我的项目中,用户可以 post 添加图像。图像很好地保存在数据库中,但未显示。在我的控制台上,我确实收到了 404 错误消息。
这是我的迁移文件中的代码:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddColumnImageUrlToOffersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('offers', function (Blueprint $table) {
//store images
$table->string('image_url');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('offers', function (Blueprint $table) {
//drop the columns
$table->dropColumn('image_url');
});
}
}
这是我的布局文件中的代码:
<div class="w-1/2 rounded shadow overflow-hidden">
<img class="object-cover w-full h-96" src="{{asset($offer->image_url)}}" alt="" srcset="">
</div>
感谢您的帮助
如果您要包含控制器文件,我可以为您提供更多信息,但通常情况下,当您通过控制器保存文件时,它通常保存在 public 目录的存储文件夹中。简而言之,您可能需要执行以下操作:
<img class="object-cover w-full h-96" src="{{asset('/storage/' . $offer->image_url)}}" alt="" srcset="">
如果这不起作用,请使用控制器代码更新 post,以便我们检查您存储图像的方式。如果您喜欢冒险,请随时查看 public 目录中的存储文件夹,看看您是否能找出合适的 url 应该是什么
更新:
查看您的控制器后,您似乎没有将图像存储在 [public 磁盘][1] 中。默认情况下 laravel 将文件存储在私有磁盘中。要将图像存储到 public 磁盘,只需像这样重写 $path:
$path=$request->file('img')->store('offer_images', 'public'); //Public being the name of disk
现在 运行 php artisan storage:link
如果您还没有的话。完成后,以下代码应该可以完美运行
<img class="object-cover w-full h-96" src="{{asset('/storage/' . $offer->image_url)}}" alt="" srcset="">
注意:当您指定 public 磁盘作为存储空间时,Laravel 将图像存储在 /storage/app/public
中。该文件夹链接到 /public/storage
。这就是为什么你必须在图像 url 前加上 /storage/
[1]: https://laravel.com/docs/8.x/filesystem#the-public-disk
检查您的存储文件夹权限
如果您在本地主机上,请尝试 777
如果你在服务器上,你可以尝试 755
创建符号 link
php artisan storage:link
指定一个public磁盘,示例
$path = $request->file('file')->store(
'offer_images/'.$request->user()->id, 'public'
);
检索文件
$url = Storage::url('file.jpg');
因为您正在 404 Not Found
尝试使用域检索文件
$url = env('APP_URL').Storage::url('file.jpg');
我的 Laravel8 项目有问题。
在我的项目中,用户可以 post 添加图像。图像很好地保存在数据库中,但未显示。在我的控制台上,我确实收到了 404 错误消息。
这是我的迁移文件中的代码:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddColumnImageUrlToOffersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('offers', function (Blueprint $table) {
//store images
$table->string('image_url');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('offers', function (Blueprint $table) {
//drop the columns
$table->dropColumn('image_url');
});
}
}
这是我的布局文件中的代码:
<div class="w-1/2 rounded shadow overflow-hidden">
<img class="object-cover w-full h-96" src="{{asset($offer->image_url)}}" alt="" srcset="">
</div>
感谢您的帮助
如果您要包含控制器文件,我可以为您提供更多信息,但通常情况下,当您通过控制器保存文件时,它通常保存在 public 目录的存储文件夹中。简而言之,您可能需要执行以下操作:
<img class="object-cover w-full h-96" src="{{asset('/storage/' . $offer->image_url)}}" alt="" srcset="">
如果这不起作用,请使用控制器代码更新 post,以便我们检查您存储图像的方式。如果您喜欢冒险,请随时查看 public 目录中的存储文件夹,看看您是否能找出合适的 url 应该是什么
更新:
查看您的控制器后,您似乎没有将图像存储在 [public 磁盘][1] 中。默认情况下 laravel 将文件存储在私有磁盘中。要将图像存储到 public 磁盘,只需像这样重写 $path:
$path=$request->file('img')->store('offer_images', 'public'); //Public being the name of disk
现在 运行 php artisan storage:link
如果您还没有的话。完成后,以下代码应该可以完美运行
<img class="object-cover w-full h-96" src="{{asset('/storage/' . $offer->image_url)}}" alt="" srcset="">
注意:当您指定 public 磁盘作为存储空间时,Laravel 将图像存储在 /storage/app/public
中。该文件夹链接到 /public/storage
。这就是为什么你必须在图像 url 前加上 /storage/
[1]: https://laravel.com/docs/8.x/filesystem#the-public-disk
检查您的存储文件夹权限
如果您在本地主机上,请尝试 777
如果你在服务器上,你可以尝试 755
创建符号 link
php artisan storage:link
指定一个public磁盘,示例
$path = $request->file('file')->store(
'offer_images/'.$request->user()->id, 'public'
);
检索文件
$url = Storage::url('file.jpg');
因为您正在 404 Not Found
尝试使用域检索文件
$url = env('APP_URL').Storage::url('file.jpg');