2016-08-12 186 views
0

我测试了是否可以发送一个或两个图像的JSON文件。目前,我已经转换成字节的图像和我用通过使用base64编码的JSON发送图像

Base64.encodeToString(temp_arr, Base64.NO_WRAP); 

(这是机器人会的base64类的,我必须使用.NO_WRAP功能,使其工作阅读其他堆栈溢出页后)

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

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

base64_decode($); 

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

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

所以我的问题是试图找出,它可以是GSON(JSON)导致问题或别的东西,如果是的话,我该怎么办。

不幸的是,我的工作方式是,我的老板需要将数据(带有文本,数据等的json)同时发送到与图像相同的php页面,这就是为什么我通过图像发送图像JSON。

回答

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的字符串

+0

不幸的是,我不能这样做。图像以Uri形式出现。整个过程是让Uri用相机拍摄照片,然后将Uri链接到使用输入和输出流写入的文件对象。但不包括来自输入流的所有字节。哪些工作,但不会为.json工作。另一件事是我们不能使用位图r.bitmapcompress。由于压缩失去了图像exif元数据:( –

0

我相信我发现我的解决方案,问题是Base64.encodeToString()会将图像字节编码为包含“+”的字符,在PHP端,数据将被发送,除了所有的“+”变成空格。我不得不用+替换所有的空格,并且它工作。