如何在Laravel 5.5中上传S3桶中的base64图像

dgiusagp  于 2023-05-08  发布在  其他
关注(0)|答案(5)|浏览(147)

我正在使用laravel API应用程序,我必须将base64编码的图像上传到AWS S3存储桶。
我可以直接上传一张图片

$this->request->imageInput->store('public');//in local server
Storage::disk('s3')->put('FILENAME', file_get_contents('imageInput'));//in S3 server

我如何将base64编码的图像上传到AWS S3存储桶,并在可以获取图像信息的位置获得响应?

hrysbysz

hrysbysz1#

list($baseType, $image) = explode(';', $base64);
list(, $image) = explode(',', $image);
$image = base64_decode($image);

$imageName = rand(111111111, 999999999) . '.png';
$p = Storage::disk('s3')->put('filepath/' . $imageName, $image, 'public'); // old : $file

关键的一点是,你需要给予文件名具体。
适配器无法获取base64数据的真实的路径。我猜这是因为base64数据不是文件对象。

j2datikz

j2datikz2#

$base64String= "base64 string";

$image = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '',$base64String));

$imageName = str_random(30) . '.png';

$p = Storage::disk('s3')->put('' . $imageName, $image, 'public'); 

$image_url = Storage::disk()->url($imageName);
y53ybaqx

y53ybaqx3#

在Laravel 5.7中上传S3存储桶中的base64图像
确保您的项目已安装Flysystem S3驱动程序:

composer require league/flysystem-aws-s3-v3

在config/filesystems.php

'spaces' => [
  'driver' => 's3',
  'key' => env('DO_SPACES_KEY'),
  'secret' => env('DO_SPACES_SECRET'),
  'endpoint' => env('DO_SPACES_ENDPOINT'),
  'region' => env('DO_SPACES_REGION'),
  'bucket' => env('DO_SPACES_BUCKET'),
 ],

在.env文件中

DO_SPACES_KEY=[YOURKEY]
DO_SPACES_SECRET=[YOURSECRET]
DO_SPACES_ENDPOINT=https://nyc3.digitaloceanspaces.com
DO_SPACES_REGION=nyc3
DO_SPACES_BUCKET=[YOURBUCKET]

在您的控制器文件中

$image = request('image');//base64 string
$file_path = 'product/'.str_random(30).time().'.jpg';
Storage::disk('spaces')->put($file_path, base64_decode($image), 'public');
return Storage::disk('spaces')->url($file_path);
fnx2tebb

fnx2tebb4#

使用Laravel文件系统上传S3中的base64镜像

确保您的项目安装了Flysystem S3驱动:

composer require league/flysystem-aws-s3-v3 ~1.0

在config/filesystems.php中

's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],

.env文件中

AWS_ACCESS_KEY_ID=[YOURKEY]
AWS_SECRET_ACCESS_KEY=[YOURSECRETACCESSKEY]
AWS_DEFAULT_REGION=[YOURREGION]
AWS_BUCKET=[YOURBUKET]
AWS_URL=[AWSURL]

控制器文件中

storage facade用于与我们配置的s3磁盘交互。在控制器文件中,我们需要添加

use Illuminate\Support\Facades\Storage;

在你的方法里

$image = $request->image;  // your base64 encoded
$data = explode( ',', $image );
$current_timestamp = Carbon::now()->timestamp;
$imageName = rand().'jpg';
$filenametostore='uploads/'. $imageName;
Storage::disk('s3')->put($filenametostore, base64_decode($data[1]), 'public');
vcudknz3

vcudknz35#

您可能需要使用以下命令来解码此图像:

$tmp = base64_decode($base64);

并将其存储在amazon s3上

相关问题