如何将 base64 图像解码保存到 laravel 中的 public 文件夹
how to save base64 image decode to public folder in laravel
我得到一个格式为 String base64 的图像,我想将该字符串解码为图像并将其保存到 laravel 中的 public 文件夹中。
这是我的控制器:
//decode string base64 image to image
$image = base64_decode($request->input('ttd'));
//create image name
$photo_name = time().'.png';
$destinationPath = public_path('/uploads');
//save image to folder
$image->move($destinationPath, $photo_name);
$img_url = asset('/uploads'.$photo_name);
$data = new Transaction();
$data->transaction_id = $request->input('fa_transaction_id');
$data->user_id = $request->input('userid');
$data->photo_name = $photo_name;
$data->photo_url = $img_url;
$data->save();
当我尝试 echo $image 时,我得到了解码值,对于 $photo_name 我也得到了值,但是当函数 运行 时我得到了这个错误
Call to a member function move() on string
如何解决这个错误?
//Controller
use Illuminate\Support\Facades\Storage;
//Inside method
$image = $request->image; // your base64 encoded
$image = str_replace('data:image/png;base64,', '', $image);
$image = str_replace(' ', '+', $image);
$imageName = str_random(10) . '.png';
Storage::disk('local')->put($imageName, base64_decode($image));
此外,请确保您的 local
磁盘配置与 /config/filesystems.php
中的一样
'local' => [
'driver' => 'local',
'root' => storage_path('app/public'),
]
这样,文件将保存在 /storage/app/public
目录中。
不要忘记写 php artisan storage:link
以使该目录中的文件在 /public
目录中可用,以便用户可以检索它们。
在数据库中保存图像不是推荐的在数据库中存储图像的方法,原因是内存速度增加,正确的方法是将 link 保存到它。
无论如何,您可以使用这行代码将图像保存在 base64
中。
从服务器中的路径获取正确的图像,而不是从 $path
.
中的 link
<?php
// Base 64 transform image
$path = __DIR__ .'/myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
echo $base64;
我得到一个格式为 String base64 的图像,我想将该字符串解码为图像并将其保存到 laravel 中的 public 文件夹中。
这是我的控制器:
//decode string base64 image to image
$image = base64_decode($request->input('ttd'));
//create image name
$photo_name = time().'.png';
$destinationPath = public_path('/uploads');
//save image to folder
$image->move($destinationPath, $photo_name);
$img_url = asset('/uploads'.$photo_name);
$data = new Transaction();
$data->transaction_id = $request->input('fa_transaction_id');
$data->user_id = $request->input('userid');
$data->photo_name = $photo_name;
$data->photo_url = $img_url;
$data->save();
当我尝试 echo $image 时,我得到了解码值,对于 $photo_name 我也得到了值,但是当函数 运行 时我得到了这个错误
Call to a member function move() on string
如何解决这个错误?
//Controller
use Illuminate\Support\Facades\Storage;
//Inside method
$image = $request->image; // your base64 encoded
$image = str_replace('data:image/png;base64,', '', $image);
$image = str_replace(' ', '+', $image);
$imageName = str_random(10) . '.png';
Storage::disk('local')->put($imageName, base64_decode($image));
此外,请确保您的 local
磁盘配置与 /config/filesystems.php
'local' => [
'driver' => 'local',
'root' => storage_path('app/public'),
]
这样,文件将保存在 /storage/app/public
目录中。
不要忘记写 php artisan storage:link
以使该目录中的文件在 /public
目录中可用,以便用户可以检索它们。
在数据库中保存图像不是推荐的在数据库中存储图像的方法,原因是内存速度增加,正确的方法是将 link 保存到它。
无论如何,您可以使用这行代码将图像保存在 base64
中。
从服务器中的路径获取正确的图像,而不是从 $path
.
<?php
// Base 64 transform image
$path = __DIR__ .'/myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
echo $base64;