我正在使用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存储桶,并获取我们可以获取图像信息的响应?
答案 0 :(得分:6)
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数据不是文件对象。
答案 1 :(得分:0)
在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);
答案 2 :(得分:0)
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]
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');
答案 3 :(得分:-1)
您可能需要使用以下方法解码此图像:
$tmp = base64_decode($base64);
然后将它存放在亚马逊s3上
答案 4 :(得分:-1)
$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);