我正在尝试使用base64编码将图像(任何大小)发送到我正在创建的API。编码的字符串作为URL中的参数访问我的API。使用PHP构建的API。
请求到达我的API后,我想将图像存储到我的服务器上,并将文件名保存在数据库中。这是有效的,但是我得到的是实际图像的奇数输出。
作为参考,我也跟着http://blog.justin.kelly.org.au/simple-base64-encodedecode-url-safe-functions/,但结果相同。
我试图在我的服务器上存储的图像:
$encode = base64_encode(file_get_contents($image));
echo $encode;
对于测试,这是我用来传递给我的API的字符串。
在API中:
$image = base64_decode($_POST['image']));
$image_name = md5($image) . ".jpg";
file_put_contents(/public/image/ . $image_name, $image);
这样做,我的图像被放在服务器上的正确目录中,并随机名称保存到数据库中。
但是,当直接导航到图像时,图像会变形:
如果你有敏锐的眼睛,图像的顶部在开始失败之前实际上是正确的,这使我开始考虑字符串是否未被正确编码以作为参数发送?
任何线索都很可爱,欢呼。
编辑:将其更改为POST,删除了urlencode / decode&已移除strtr
。
答案 0 :(得分:0)
也许我看错了,但首先你把它编码为base64 - > urlencode然后你解码它base64 - > urldecode再次,后者不应该是相反的顺序吗?
答案 1 :(得分:0)
感谢评论:
base64_encode(file_get_contents($image_path));
不需要urlencode
或strtr
。使用POST请求,并更改Web服务器上的post_max_size
以允许传递更大的图像。
$image = base64_decode($this->getParameters('avatar'));
$image_name = md5($image) . ".jpg";