📜  上传图片到数据库 laravel 8 - PHP (1)

📅  最后修改于: 2023-12-03 15:06:11.029000             🧑  作者: Mango

上传图片到数据库 Laravel 8 - PHP

在 Laravel 8 中,我们可以轻松地将图片上传到数据库。这就意味着,我们可以以数据的形式存储图片,而不是以文件的形式存储。这对于某些应用程序来说是很有用的,比如说,我们可以通过数据库备份和恢复来保存和还原数据和图片。

下面是上传图片到数据库的几个步骤:

步骤 1:创建数据库表

我们需要首先创建一个数据库表来存储图片。我们可以使用 Laravel 8 的迁移工具来创建数据库表。在命令行中,运行以下命令来创建迁移:

php artisan make:migration create_images_table

然后,在 migration 文件中,创建一个 images 表,并添加必要的列来存储图片的数据和文件类型。

示例代码:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateImagesTable extends Migration
{
    public function up()
    {
        Schema::create('images', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->longText('data');
            $table->string('type');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('images');
    }
}
步骤 2:创建表单

我们需要创建一个表单,允许用户上传图片。在这个表单中,我们需要添加一个 input 元素,类型为 file。在提交表单时,我们需要将文件的数据(二进制数据)发送到服务器。

示例代码:

<form method="POST" action="/images" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <input type="submit" value="Upload">
</form>
步骤 3:处理文件上传

现在我们需要处理上传的文件。我们可以使用 Illuminate\Http\Request 类的 file 方法来获取上传的文件。然后,我们可以使用 Illuminate\Support\Facades\Storage 类的 put 方法将文件的数据保存到我们之前创建的 images 表中。

示例代码:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class ImageController extends Controller
{
    public function store(Request $request)
    {
        $image = $request->file('image');
        $data = file_get_contents($image);
        $type = $image->getClientOriginalExtension();
        Storage::put('public/images/'.$image->getClientOriginalName(), $data);
        
        $imageModel = new Image;
        $imageModel->name = $image->getClientOriginalName();
        $imageModel->data = $data;
        $imageModel->type = $type;
        $imageModel->save();
        
        return redirect('/images')->with('success', 'Image uploaded successfully');
    }
}
步骤 4:显示图片

现在,我们需要显示我们上传的图片。我们可以使用以下代码从数据库中获取图片的数据,并将其添加到 img 元素的 src 属性中。

示例代码:

class ImageController extends Controller
{
    public function index()
    {
        $images = Image::all();
        
        return view('images.index', ['images' => $images]);
    }

    public function show(Image $image)
    {
        $data = Storage::get('public/images/'.$image->name);
        return response($data, 200)
            ->header('Content-Type', $image->type);
    }
}

在视图文件 images.index.blade.php 中,我们可以使用以下代码来显示图片:

@foreach ($images as $image)
    <img src="{{route('images.show', $image->id)}}" alt="{{$image-name}}">
@endforeach

这样,我们就可以方便地将图片上传到数据库中了。

总结

在本文中,我们了解了如何上传图片到 Laravel 8 中的数据库。我们首先创建了数据库表来存储图片,然后创建了一个表单来允许用户上传图片。接着,我们处理上传的文件,并将文件的数据保存到数据库中。最后,我们演示了如何从数据库中获取图片的数据并将其显示在页面上。