我是法國人,所以,我對我的英語對不起......的Base64編碼的Android PHP的解碼使錯誤
我開發一個Android應用程序,其與PHP REST服務進行通信。所以,當我嘗試將一個圖像文件編碼爲Base64的是這樣的:
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_CAPTURE活動(AVD 5554)
我已經閱讀了大量關於類似問題的討論,但沒有解決我的錯誤做。
感謝您的幫助
問候,
out是接收BufferedInputStream讀取圖像文件的StringWriter(我已經用完整的代碼更改了我的原生帖子) –
您不應該寫入StringWriter,而是使用字節流,這意味着當您寫入到一個StringWriter它會嘗試在默認編碼中對其進行解碼,並且當檢索字節時,它將使用默認編碼再次對其進行編碼,但是這次它已經刪除了它無法理解的「字節」。您需要獲取沒有StringWriter的字節數組。 – jishi
非常感謝,沒錯!使用ByteArrayOutputStream而不是StringWriter來解決我的問題。 –