如何将base64编码图像上传到Amazon S3而无需使用官方PHP SDK临时保存在文件系统上?
问题描述:
我有一个使用名为html2canvas的JavaScript库的“截图”。它将“截图”作为base 64编码图像返回,然后通过AJAX传递给我的PHP服务器。然后,服务器将暂时将图像保存在文件系统中,将图像上传到Amazon S3,然后立即删除该文件。它可以工作,但我想看看是否可以直接上传图像而不保存到文件系统。如何将base64编码图像上传到Amazon S3而无需使用官方PHP SDK临时保存在文件系统上?
我知道有一种方法可以直接通过client side javascript上传图片,但我不想启用CORS。另外,我找到了a solution for Node.js,所以我想在PHP中也有办法做到这一点。
我注意到,有somebody asking similar question,但目前还没有回答这个问题,情况有点不同,因为我现在用的是official PHP SDK与the official service provider for laravel
那么,有没有一种方法,我可以直接上传一个base64编码的图像到Amazon S3而不暂时保存在文件系统上?
答
跳过这一步,如果你的字符串是正确的输出,但如果你需要从GD图像“保存”,然后就可以像使用OB控制保存到字符串:
ob_start();
imagepng($image);
$pngData = ob_get_clean();
ob_end_clean();
然后你可以只需指定Body
即可直接上传字符串,而不是文件。
$aParams = [
'Bucket' => $bucketName,
'Key' => $destName,
'Body' => $string,
'ACL' => 'public-read'
]);
$result = $s3Client->putObject($aParams);
您还可以选择添加图像头等,就像您上传文件一样。
put_object需要一个文件处理程序。因此,您需要检查PHP代码中是否存在类似文件的I/O对象,或许您应该查看序列化库。 – mootmoot