首页 > 解决方案 > 上传 base64_encoded 图像从原始大小增加文件大小

问题描述

我正在使用以下代码将 base64 编码图像上传到 s3。

$config = ['Expires' => '30 day','CacheControl' => 'max-age=31536000' ];
$path = 'website/'. $image;
Storage::getDriver()->put($path, base64_decode($b64str), $config);

上传后,我注意到 s3 中的文件与实际文件大小相比具有更大的文件大小。

有什么办法可以上传相同大小的吗?

在这里,我附上了文件实际大小和 s3 大小的屏幕截图。

上传文件大小前的图1

在此处输入图像描述

图 2 上传后的文件大小

在此处输入图像描述

标签: phplaravelamazon-s3laravel-5base64

解决方案


不幸的是,base64增加了文件大小。

每个 Base64 数字正好代表 6 位数据。因此,输入字符串/二进制文件的三个 8 位字节(3×8 位 = 24 位)可以由四个 6 位 Base64 数字(4×6 = 24 位)表示。

这意味着字符串或文件的 Base64 版本最多为其源大小的 133%(增加约 33%)。如果编码数据较小,则增加可能更大。例如,长度 === 1 的字符串“a”被编码为长度 === 4 的“YQ==”——增加了 300%。
来源:https ://developer.mozilla.org/en-US/docs/Glossary/Base64


但是,尺寸差异似乎太大了。你能展示你如何编码图像吗?


推荐阅读