简体   繁体   English

无法将Base64字符串从Android发送到php

[英]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):

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM