Php 无法将base64中编码的图像保存到文件系统中

Php 无法将base64中编码的图像保存到文件系统中,php,android,image,base64,Php,Android,Image,Base64,我正在将一个图像从Android上传到PHP服务器。在android中,我将位图图像编码为base64字符串: ByteArrayOutputStream stream = new ByteArrayOutputStream(); mBitmap.compress(Bitmap.CompressFormat.JPEG, 20, stream); byte[] byteArray = stream.toByteArray(); nameValuePairs.add(new BasicNameVa

我正在将一个图像从Android上传到PHP服务器。在android中,我将位图图像编码为base64字符串:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, 20, stream);
byte[] byteArray = stream.toByteArray();

nameValuePairs.add(new BasicNameValuePair(DatosDB.KEY_IMG, Base64.encodeToString(byteArray, Base64.DEFAULT)));
我试着打印结果字符串,它看起来确实像一个编码图像。就是这样:

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
然后,在服务器端,这是一块PHP,用来解码该字符串并将其保存在文件系统中:

function base64_decode_image($image, $name){
    if ($image){
        $new_file = fopen("/Applications/MAMP/htdocs/api/img/" . $name, "x");
        fwrite($new_file, base64_decode($image));
        fclose($new_file);
        //echo base64_decode($image);
    }
}
我也试过这样做:

    $decoded = base64_decode($image);
    file_put_contents("/Applications/MAMP/htdocs/api/img/" . $name, $decoded);
但是没有变化。它保存了图像,但我无法将其可视化。我检查了PHP中作为图像接收的字符串是否与Android发送的字符串相同,文件名是否正确

那么我在这里错过了什么?错误是在Android端还是服务器端?

可能是打字错误:

file_put_contents("/Appications/MAMP/htdocs/api/img/" . $name . ".jpg", $decoded);
                       ^-- missing an L?

另外,检查您是否确实从Android获取base64编码数据。做一个
var\u dump($image)
并查看base64数据是否回显非常简单

运行PHP服务器的用户是否确实有权写入该目录?PHP有时会在写入图像时自动失败。

您可以添加base64编码的数据,因此,更容易了解问题发生的位置。对于这样的问题,您实际上可以尝试使用base64对图像进行解码,并确保您可以在向服务器发送帖子并进行猜测之前首先看到图像。您完全正确,我真是莫伦!现在该文件已创建,但我无法将其可视化。我将编辑问题以显示编码字符串。