📜  php laravel 干预base64 到图片保存 - PHP (1)

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

PHP Laravel 干预 Base64 转为图片保存

在开发 Web 应用程序的过程中,我们经常需要将图片数据以 Base64 的形式保存在数据库中。而将 Base64 数据转换为图片需要一些处理。本文将介绍如何在 Laravel 框架中干预 Base64 转换为图片的过程,并将图片保存到指定目录。

准备工作

在开始之前,我们需要确保已经配置好 Laravel 开发环境,以及熟悉基本的 PHP 和 Laravel 开发知识。

创建控制器

首先,我们需要创建一个控制器用于处理上传的 Base64 数据并将其转换为图片。可以使用下面的命令创建一个名为 ImageController 的控制器:

php artisan make:controller ImageController
处理上传的 Base64 数据

ImageController 中,我们首先需要定义一个方法来处理上传的 Base64 数据,并返回保存的图片路径。可以使用下面的代码:

public function uploadBase64(Request $request)
{
    $data = $request->get('image');
    $image_parts = explode(";base64,", $data);
    $image_data = base64_decode($image_parts[1]);
    $file_name = uniqid() . '.jpg'; //自定义文件名,也可以使用其他的文件名规则
    $file_path = public_path('uploads/') . $file_name;
    file_put_contents($file_path, $image_data);

    return ['path' => 'uploads/' . $file_name];
}

在上面的代码中,我们首先从请求中获取 Base64 数据,然后将其拆分成数据头和Base64编码的数据。接着,我们对编码的数据进行解码并保存为文件。最后,返回文件的保存路径。

在路由中注册控制器方法

完成了处理数据的控制器方法后,我们需要在路由中注册该方法。可以使用下面的代码:

Route::post('/upload', 'ImageController@uploadBase64');
添加路由跨域中间件

如果前端和服务器不在同一个域名下,那么会出现跨域问题。我们可以通过添加路由跨域中间件来解决跨域问题。可以在 $middlewareGroups 数组中添加一个新的中间件组,用于处理跨域问题,例如:

'cors' => [
    \Barryvdh\Cors\HandleCors::class,
],

然后将新的中间件组添加到路由中,例如:

Route::group(['middleware' => 'cors'], function () {
    Route::post('/upload', 'ImageController@uploadBase64');
});
将图片保存到指定目录

在上面的代码中,我们将解码后的 Base64 数据保存到了 public/uploads 目录下。如果需要将图片保存到其他目录中,可以修改 $file_path 变量的值为指定的目录路径,例如:

$file_path = '/Users/user/Documents/images/' . $file_name;
总结

在本文中,我们介绍了如何在 Laravel 框架中干预 Base64 转换为图片的过程,并将图片保存到指定目录。通过这种方式,我们可以方便地上传图片,并且无需使用任何第三方库。因此,这是一种非常实用和方便的方法。