如何解决 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');