Base64 Android编码到PHP解码出错
我是法国人,所以,我很抱歉我的英语 我正在开发一个Android应用程序,它可以与PHP REST服务进行通信。因此,当我尝试将图像文件编码为Base64时,如下所示:Base64 Android编码到PHP解码出错,php,android,android-emulator,base64,Php,Android,Android Emulator,Base64,我是法国人,所以,我很抱歉我的英语 我正在开发一个Android应用程序,它可以与PHP REST服务进行通信。因此,当我尝试将图像文件编码为Base64时,如下所示: InputStream fileInputStream = context.getContentResolver().openInputStream(uri); BufferedInputStream in = new BufferedInputStream(fileInputStream); StringWriter out
InputStream fileInputStream = context.getContentResolver().openInputStream(uri);
BufferedInputStream in = new BufferedInputStream(fileInputStream);
StringWriter out = new StringWriter();
int b;
while ((b = in.read()) != -1)
out.write(b);
out.flush();
out.close();
in.close();
String encoded = new String(android.util.Base64.encode(out.toString()
.getBytes(), android.util.Base64.DEFAULT));
在服务器端,我制作:
$data=base64_decode(chunk_split($base64BinaryData));
结果是我的图像文件已损坏
信息:该图像是通过模拟模式下的android.provider.MediaStore.ACTION_image_捕获活动(avd 5554)制作的
我已经读了很多关于类似问题的讨论,但是没有任何东西可以修复我的错误
谢谢你的帮助
您好,您能把区块分割掉吗 另外,你能把这两个二进制文件散列吗?也许使用sha1,看看它们是否真的不同?我假设:
out.toString().getBytes()
这是错误的。什么类型的“外出”?如果是图像,则需要获取图像的原始字节,而不是对象字符串表示的字节。out是接收图像文件的BufferedInputStream读取的StringWriter(我用完整代码更改了我的本机帖子),您不应该向StringWriter写入,您正在使用ByTestStream,这意味着当您写入StringWriter时,它将尝试以默认编码对其进行解码,当检索字节时,它将再次使用默认编码对其进行编码,但这一次它已经删除了无法理解的“字节”。您需要在没有StringWriter的情况下获得字节数组。非常感谢,这是正确的!使用ByteArrayOutputStream而不是StringWriter来解决我的问题。事实上,哈希值完全相同!好的,我认为Android Emulator的替代图像不可用(只是在Android应用程序中可用)。我必须在真正的设备上试用我的应用程序,我会告诉你这个问题。谢谢你的澄清。