[英]Can't send Base64 String from Android to php
I have an AsyncTask, which looks like this: 我有一个AsyncTask,看起来像这样:
protected Void doInBackground(Void... notUsed) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader = null;
// Send data
try {
// Defined URL where to send data
URL url = new URL("http://www.maarten-vandeperre.be/demo/server_lokeren_POST.php");
// Send POST data request
String data ="&" + URLEncoder.encode("data", "UTF-8") + "=";
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
writeNotifications(wr);
//wr.write( data + "data" );
//writeNotifications(wr);
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null) {
// Append server response in string
sb.append(line);
}
// Append Server Response To Content String
Log.i(TAG, "server response: " + sb.toString());
action.doAction();
}
catch(Exception e){
Log.e(TAG, Log.getStackTraceString(e));
error = e.getMessage();
}
finally{
try{
reader.close();
}
catch(Exception ex) {}
}
/*****************************************************/
return null;
}
and writer methods, where the one for the base64 encoding is the following: 和writer方法,其中base64编码的方法如下:
private void writeNotificationData(JsonWriter writer) throws IOException {
writer.beginObject();
writer.name("comment").value(notification.getComment());
writer.name("category").value(getCategory(notification.getCategoryId()));
writer.name("urgency").value(getUrgency(notification.getUrgencyId()));
writer.name("street").value(notification.getAddress().getStreet());
writer.name("houseNumber").value(notification.getAddress().getHouseNumber());
writer.name("latitude").value(notification.getAddress().getPosition().latitude);
writer.name("longitude").value(notification.getAddress().getPosition().longitude);
Log.i(TAG, "write image urls: " + notification.getImageUrls());
if(notification.getImageUrls() != null && notification.getImageUrls().size() > 0) {
String base64 = encodeToBase64(notification.getImageUrls().get(0));
Log.i(TAG, "image to base64: " + base64);
writer.name("image").value(base64);
}
writer.endObject();
}
private String encodeToBase64(final String url) {
ByteArrayOutputStream bao = new ByteArrayOutputStream();
Bitmap bitmap = BitmapFactory.decodeFile(url);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bao);
byte [] ba = bao.toByteArray();
String ba1= Base64.encodeToString(ba, Base64.NO_WRAP);
return ba1;
}
When I don't send the base64 string, but a random one (RandomStringUtils.randomAlphabetic(2000)), I see it in my server log. 当我不发送base64字符串,而是发送随机字符串(RandomStringUtils.randomAlphabetic(2000))时,我会在服务器日志中看到它。 When I use the code I posted above, nothing pops up.
当我使用上面发布的代码时,不会弹出任何内容。 Am I missing an encoding/decoding somewhere?
我在某处缺少编码/解码吗?
This is the string that's received by the server: 这是服务器接收的字符串:
MSOImVAPfCBGNDXJNuHtFGhmtiUqQXJSlstpcEaGUYyyVeOezyyJsqeJxvlorvFMDxGtbIPMXRyvDSmUZuQadaAFzGdVFBfObiTHLTkuvweKpEylfWEBUhCqaCpBUQUjdTNbXzXTJWqLWDanhHimJoaPNtthENmMUYbxVCKUYVQdqVdbZyewRIArgcCHvLhioCAjqUswiZNxoXwzVQCwGSHpvBRLKEcsLhfFUHcyAtUQmHHQUzZBapcNhLpxJAuasXuAuzaxqBiaQhiKGTvNOGSeNNZRBAYCLIosrzkIYZElFgRiVbYqebKmBEXxBDxbCFdIIXPEZhruKVLLIBfsImlFevGaWouUYSbMITTDPVlcEmsTPDekEVwCOmpHfmUwFQlFDYzUenRAxBHgLIUqRgETQexKViWyNMCycRJLUehSWLNGSNGpOUIrPILfXVkUDfEQHkOKwcOkoTAWGZvjivNJNRkipecNcLTOYazuhKOLODmYFgkfQhpzImQQLBVBelRtMXtaSFLCeMXptiYrMSQqkEYocPKYBSizkzTmXYQTARzqmvGdwQbLiMiNKWNkJQkYtsCZAzCZbVHFmHcdtQCbgbypBZadzIAaSFgoikiVnRVmshxoikqKnulgPPPgJkwTIlRwsGkLFbZTPCPXkCvpRMYZiNnzpTuAbEKtmwgLkukPjjeDPiHuvVbkgDgHYQffGJoZirxRaRblJNkVGfSNWJsETcXYRrdySFlyclnlzzMmAdLKKIbvjVaxrzaBiUujbEyFESqpvUBAMpLzisMIsekJuhIDnKpdhDsnmvHYhmaFlKzkDDUHAkTAtfzbUGXIuuMECYYYgbJHwNTYWEjAxFLtjIoQDckqFjOxuYVMkEyidjkXojXznPybymUqZFuhvGNLNHgZnNjJoHJsIEyDeyhbaKOGGTQxunIOCtbgkgIBnWpSFDsgeDjoZPsYcaxYayRJGemFqzjMLUEKXwLKziotjPMwCXGUeCffeIropZVZvdHZwIrYPHHElggBOvgpvRvpQkKzmukbulMuAuWsoonOxTDjLFiHDdCTSwcFgpqbkgOKkDeNyhAQUfWuQGhpOsEbOIOAkMbxbJMMtMQjdEJEPGYGSHcXWrEHWYQEaBdgkiISLGRfKKMHcVYnuJkRSawATXcGofvrFXSnvpauiylCkARfmpWrYJgYGBlfcNOoiLskrODiBQdxgjfyTjSzWsCDYJmbACWODmnSejxNacLzvCyJNwaatFbrgAAUXjJRTOWdIwjBGJogHiGeIsCbmOtWrsSIUSXKLseLARonSejvwShpPritPsSutLCFpPktbFJWVfqHuFHWLUfXCRmXOOCcEPAVKkinMyKYlpCWfBfngCnWrTFjnmteCBFqhtfWCQOBmmXdaNkCRrAXuPsHLLTrXauYXVnrvPgEvyXyULEALBMDJxTNaxrBYuNFySOYRFBvTsgqqKqpkagVyZiGhLSvXNJcOADsVBEfuLBxsFiHpoohECJvARBReiRkBvgMhaEnUWIzZEzPVvxiaiWhXMTTJJqQbmnjvbZlhZGJQoTRjjoixTcAxVeCFbfapaiCiAgRMVknMQYFTCDjRbAhjygnzCWtwivVKPpnpbWKBjgJuNGGcOKZfsrrXLWUpRGDxrpwwsSwNbnIyunuSVJkUjKxNARgHFlNZuSxZQWcbAHRzaKHSARRWjolMsmNTrUjVQulaFvSYocgnWAxYBnRhIxzNRVygBDXNjmuFPpxAnaDUsmlXZyZNFAwmrYQoGZzSMFdBeXYJPYwLqaSgbevXvtauVOZjMvTxZpffIauMeOFVQEYgzvLSxVraweqmIHxCNUyWKFTvrcjlmuJJsgTWaDutXKYGLViQzNUynFjIKCWaRqvfGIFYaKFgFUXVYknPLvxlyiVALQIGxeKKLdjJLUXJxTfceuakyVPVFEVbxadTagbjSoBLXqBVmfdwIzJKvnKyqyaulbZFIpFxicJSvwBJLgnmpnZ
and this is the string (Base64) which can't be received by the server: 这是服务器无法接收的字符串(Base64):
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAggBJIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+e2/jj/s24IMsUVvOuOOuf7W79Bjnp2zxnpTga2lE1v8AZhMTB58wnPXBbvj05Gf0J51oNN/tGG3/AHkttdDHW4P2O45b3/2f/rkHFVrvRrW3lna4EpkB+zTW/I/iYHrzyfXkcY5INXdYfCu++i2u3rK2l+ijfdq17tytfwqmFWIckr6JJ6LXWaT1ktdPNpctndNuF4LWyiMVqYrbNwPtBggNn/poZ8cfgfbOMkfxWIVkngns0/dWxgFwYPPOLjBcfb+CeuB69wclc06ztkkszbXx/tC587rP/oeOW7YyeRgnPAHcnmS3TyIpjLbxRWsMFlbD/l1vPvN/aP8AxMcg575+vvXHXrPWNt+2zSb2dtEm7vq+ZK6im5eXGl7LmSvurt+XOktl57q+2t9RmlXAs7ZMW8UsM2LcQz3H/Hv85Bx0I6HI5zjrzkxXUemyXX2hIr+7hm/0eG/Fjp+BefYWA/tL1yc8ducj7xq5NNHLcxxpH5UU0A+wQfZ8Wf2PTy+ScY4+7x9OvzVatJY3lNyI5fK8hfIM8+nH7N/aGpOO54x29QT1xmuA9T6r+6+rWV7W363vvftpfe3QTT7C3ML/AGe++w/Y9txPcfZzdfacmT24ztXn1C8g7qfp13daZD5dzLKBFABnAP8AoQz/AMw3Ofw64xnnFZsi7r28H/HjFPi3uLi+/wBKtMKX6cnr9emcnIYlt/GJvL8rzcwwC4+zwW55wT6n247g4HJ+93/Unfd26fDf89PxfkbYXCKhQf1VpXS0s2t56tu+jcL31bTdno2WDcRW1wg8uaWGbbczz89fnzySD2/nnJAJ1LuWOWF5LJIpbaaBfI/5dP4j69eP6c5GKqR2Qisc/ZovOm/0i3g8j/acDvjnnk+pHUAm1bz29mjW/wC9usQWP26eCf8A0M3pDDUjyc+nTjnqSM120UqEXdpp8seveSXTS7W1tElq3eTrD/x3bWyh5faq+fl57rV2ZVt2U3E8U582WHb+/wDs5H2bBk9cY45+uRyQTVyzt7bSr6K4t4/OuhP58HkAfa7bO8dM+x/MEk4qRDbW9xeTafHLHKMW4gng1EfarL7A3qO2M/RgM4JqO2eK/imtpP8ARJYMW32f8X56/X/Fs8bVFdTXeFv/AE4d06Sw/Mkrbdb83vSind621/F9bIsNFq8SajK7RS+fjybicC0tOCwGck+/XnOc9M1Z060t47O3NtmS5486ee3/AOPb5nH/ABLTnvjoehJ5JJNZhkmkY6bEc2h+2bZp89mbJyQT788jpyDzejd9NvDPZW0s+meQLe/8i429C/8AzDc/8gv885HOevNVqV3fCu7envJPVc07Ozas3bXtead5NM0pYlUHe+tl0bVk5pNpNPXVa77XbdytHcnTdLIjvJYYbPpcT2Ofs2C+f7SGe+4dTnoQeHzdOqxxwRww/vY4v9RZXFv9q6WD9iO3rnjIxnNMnCSw20NtcRE/6Z3N39pwX9/px34HJDYunT7MxxyXun4l8+y/1A+ym2yXweuP+J3jI+uBk5JftIxvpa9r6tt6yt0b3T+d9bvXKpiMRXT9779Vu7at+uj5nqtbq7rQ2MV7DHcxQxW1/NOLj9+uO7jufc459ecHNSmWytrSHMct1dSz33+kQT6faYOnM+e/P9u4weOmOTjJht7gzCeO0klkiXFvPPB/ouc9O/HQcc9CM8E1Yig/s6O8t7g3N0bzpDBb/az100dM4x+PrnkHLw9BLm36PXdPVK9nq2vktLtyVzpqf7bRl717WVop6pudrWfe91vbm1bWkNvZJe2c8kUn2aKKex8+4n9t/PI9BnGeuM5IwWWj3l3HeSXklragT/v572c/6Scn3z7gnHpjOCLc4itRbeZHfxWnHn2MHcFn69dK/tQ4z+Q7cvkW3W5+zahJ5cRwIPIuMfaME8akffn+vTA8+7lov+H1nq9ey0Xfm1118ujS5+nuq1ktL2c9Frolpd920nfmuGzikKXkdzF5UM48jyJz3YjTdQ6+x/76PBwSKdxNc3sJvYrwRReQPtBguPfVwOv/AGEPzz7E6IudPjS2gkTypuPs8FjB/onBceh68EfU9PmzDY21jJNNKY4vNwPt1hg8WeW9uPr2PTJHGyouK0kr+jt+Z34mmsQmnom1vrsmu/zVtU3e7aRW/dXsM8ttcCG6mgvPPng/0X7NyQTyevHP1HBwTT7K4+z2UVt+6l8mcfaLiD/RehbnJ9ievoe45vLaabp/237RPLKMr59j5B/vNnGT9P8AO2qMlsPJ8tLfUIpJRZ3HtbfM2Oh47cd+B13GtsO1XTtp016/He92/Pv130PHn+5wrV3Zu19Hdc0m3q9E+Wy69273C7j1XS4zHJ5vlf6CIIP+XzqwP17c9eASQTzYjtmvrK2juY8ywQDTvPGPtdsMt/p/XnqMjt6klqq3ZuZQTZHbMb4XHGD/AKF/ZzA/y/Mn0Jrda8MU88ITyRYwD/T8Zz/xMmI6t7aeepJBYZ5JrqoUFQTino7fg5O703d/81d3McvwCs9kkovVL/p4ttW0229W73Tbs0pQxWC2SR2xSWW3lxcT/wCjnNzekt7c5AHPUfNjJGTIk8NpFHELqKYXv+kYgAFpwdW988447nJ5IBrGjSC8bUbiW2lE8k4uJ7mA6gTyX5wDjpnr7Y5DCrOloczeaPOkWcZgt+M3m98ep688H07Nzp7Nd3966f1/w5zUaVf2zw+8ltzW0+LRteWu97yfM0k27mjXdjbwtJ5ctsROLeU5A6ls6h/yB/8Aiaf24PX0GCCDVqGRP3zobriACET259ZMc/qceoBJIJMiQXC6bPGZcp/oVtb9rT/kIn/iYdSOgz7HHJJJNf7TcJC19H9ktJZvsNx+/g7ZcD09Gx3znJ4yeCrQw/vW01WqS7SVumnu3a3u9nY78GnR5nK65rKzutE53eqb6qy0d77KR0EmpRkRW9vcWsIhmvLiY/aP9E+8R6/hjnr1PNc3PFhY57f/AF2o/wCv7WZssv7+4xnPXPqaoaWgWe8uI/8ATIuMQTwEcf2ew44/T/d5OCa1kPm6dJJeS2sYl2+dcdLPqf7OGD1+6evOCepwa2wdH2Kmt20rvXu13e6tby3u22aYer7au01po09ndOS2Tenw21vo7uTbtFa2dzZwTafqsksVpLOBB+4FoTnI6Y7f2Yf++h1wTUyIq2M0MVndXVr
I'm stuck with this now and the other answers on stackoverflow don't seem to solve the issue... 我现在坚持这一点,并且关于stackoverflow的其他答案似乎都不能解决问题...
Using this implementation of "encodeToBase64" solved it. 使用“ encodeToBase64”的此实现解决了该问题。 As greenapps suggested, we shouldn't use the bitmap to get the bytes of an image file.
正如greenapps建议的那样,我们不应该使用位图来获取图像文件的字节。
private String encodeToBase64(final String url){
try {
File file = new File(url);
byte[] bFile = new byte[(int) file.length()];
FileInputStream inputStream = new FileInputStream(url);
inputStream.read(bFile);
inputStream.close();
return Base64.encodeToString(bFile, Base64.NO_WRAP);
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
}
return null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.