首页 文章

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

提问于
浏览
0

我正在将图像从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)));

我已经尝试打印生成的String,它看起来像一个编码图像 . 就是这个:

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

然后,在服务器端,这是PHP的一块,它应该解码该String并将其保存在文件系统中:

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端还是服务器端的错误?

2 回答

  • 0

    可能是拼写错误:

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

    同样,检查您是否真的从Android获得base64编码的数据 . 这很简单,可以做 var_dump($image) 并查看你是否回显了base64数据 .

  • 0

    运行PHP服务器的用户是否实际上有权写入该目录? PHP有时会在写入图像时无声地失败 .

相关问题