使用base64编码

时间:2016-08-12 00:58:51

标签: java php android json gson

我正在测试是否可以发送带有一两个图像的JSON文件。目前,我将图像转换为字节,我使用

Base64.encodeToString(temp_arr, Base64.NO_WRAP);

(这是Androids base64类,我必须使用.NO_WRAP功能使其在读取其他堆栈溢出页面后工作)

将其转换为字符串。此时,我将该字符串对象传递给我的JSON文件(使用GSON库)并添加字符串go it。这些数据将被发送到PHP页面。

我测试将字节转换为base64并保存到文本文件,将该文本文件复制到我的php页面,使用

通过我的php页面运行它
 base64_decode($);

并且能够正确地重新创建图像(sha哈希匹配)。所以现在我需要测试它通过网络发送它并使用json。唯一的区别是base64字符串被放在其他json文件而不是文本文件中,json被发送到php,我抓取数据并用PHP解码它。

现在问题是图像已损坏,在十六进制编辑器中查看这两个文件,十六进制编辑器中的前20行左右匹配正常,但之后它不匹配。奇怪的是,文件的最后部分具有相同的数据,除了上传的副本有额外的字符使其更大。

所以我的问题是试图找出,可能是GSON(JSON)导致问题或其他什么,如果是这样,我该怎么办呢。

可悲的是,我的工作方式是,我的老板需要同时发送数据(带有文本,数据等的json)到同一个带有图像的php页面,这就是我通过json发送图像的原因。

2 个答案:

答案 0 :(得分:0)

为我尝试这项工作,将图片转换为base64

 public static String getStringImage(Bitmap bmp)
    {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 60, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        Log.e("SignUp", "Image Decode : " + encodedImage);
        String asa = encodedImage;
        return encodedImage;
    }

//传递位图图像并返回base64的字符串

答案 1 :(得分:0)

我相信我找到了我的解决方案,问题是Base64.encodeToString()将图像字节编码为包含“+”的字符,在PHP端,数据将被发送,除了所有“+”成为空格。我只需用+替换所有空格,它就可以了。