1

In my Android Studio code, I open up my camera and take a picture which I can save. However, I then want to send this JPG picture to my PHP code. I have it sorted for sending strings to PHP however when I try to send an image it doesn't work. Because of this I have encoded my image into a base64 string to try and send it that way but it's still not working.

Java code:

public class celebs extends AsyncTask<String, String, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        //Toast.makeText(getBaseContext(),s,Toast.LENGTH_SHORT).show();
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @SuppressLint("WrongThread")
    @Override
    protected String doInBackground(String... params) {

        sharedPreferenceConfig = new SharedPreferenceConfig(getApplicationContext());
        Intent intent = getIntent();
        File Image = (File) intent.getSerializableExtra("Image");

        String encode = encodeFileToBase64Binary(Image);

        try {

            String data = URLEncoder.encode("Image", "UTF-8") + "=" +
                    URLEncoder.encode(String.valueOf(Image), "UTF-8");
            //URL url = new URL("http://192.168.43.35:80/App/pythonconnect.php?" + data);
            URL url = new URL("http://10.167.120.26/App/pythonconnect.php?" + encode);
            System.out.println("1");
            URLConnection con = url.openConnection();
            System.out.println("2");
            con.setDoOutput(true);
            System.out.println("3");

            BufferedReader read = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuilder s = new StringBuilder();
            String line = null;
            while ((line = read.readLine()) != null) {
                s.append(line);
            }
            final String result = s.toString();
            System.out.println(result);
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}


@RequiresApi(api = Build.VERSION_CODES.O)
private static String encodeFileToBase64Binary(File file){
    String encodedfile = null;
    try {
        FileInputStream fileInputStreamReader = new FileInputStream(file);
        byte[] bytes = new byte[(int)file.length()];
        fileInputStreamReader.read(bytes);
        encodedfile = Base64.getEncoder().encodeToString(bytes);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return encodedfile;
}

ERROR:

W/System.err: java.io.FileNotFoundException: http://192.168.43.35:80/App/pythonconnect.php?Image=%2F9j%2F4QFnRXhpZgAATU0AKgAAAAgABwEAAAQAAAABAAAPwAEBAAQAAAABAAAL0AEPAAIAAAAHAAAAYgEQAAIAAAAJAAAAaQESAAMAAAABAAMAAAEyAAIAAAAUAAAAcodpAAQAAAABAAAAhgAAAABHb29nbGUAUGl4ZWwgM2EAMjAyMDowMzoxNSAxNjozODoyMwAADYKaAAUAAAABAAABKIKdAAUAAAABAAABMIgnAAMAAAABAEsAAJAQAAIAAAAHAAABOJIBAAoAAAABAAABP5ICAAUAAAABAAABR5IGAAUAAAABAAABT5IJAAMAAAABAAAAAJIKAAUAAAABAAABV5KQAAIAAAAENjY0AKACAAQAAAABAAAPwKADAAQAAAABAAAL0KQMAAMAAAABAAEAAAAAAAAAmCMDO5rKAAAAALQAAABkKzAwOjAwAP%2F%2F%2FWgAAABkAAAAqQAAAGQAAABjAAAD6AAAEVgAAAPo%2F%2BAAEEpGSUYAAQEAAAEAAQAA%2F9sAQwACAQEBAQECAQEBAgICAgIEAwICAgIFBAQDBAYFBgYGBQYGBgcJCAYHCQcGBggLCAkKCgoKCgYICwwLCgwJCgoK%2F9sAQwECAgICAgIFAwMFCgcGBwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK%2F%2BICZElDQ19QUk9GSUxFAAEBAAACVAAAAAAEAAAAbW50clJHQiBYWVogB%2BAADAAIAAkAJgAcYWNzcAAAAAAAAAAAR09PRwAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1HT09HdeGmsTw0N2MQyKtmBjKiigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZGVzYwAAAQgAAABAY3BydAAAAUgAAABad3RwdAAAAaQAAAAUYmtwdAAAAbgAAAAUclhZWgAAAcwAAAAUZ1hZWgAAAeAAAAAUYlhZWgAAAfQAAAAUclRSQwAAAggAAAAgY2hhZAAAAigAAAAsYlRSQwAAAggAAAAgZ1RSQwAAAggAAAAgbWx1YwAAAAAAAAABAAAADGVuVVMAAAAkAAAAHABzAFIARwBCACAASQBFAEMANgAxADkANgA2AC0AMgAuADEAAG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAPgAAABwAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADYAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvoAAAOPUAAAOQWFlaIAAAAAAAAGKXAAC3hwAAGNlYWVogAAAAAAAAJJ8AAA%2BEAAC2w3BhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AAAApbc2YzMgAAAAAAAQxCAAAF3v%2F%2F8ycAAAeTAAD9kP%2F%2F%2B6P%2F%2F%2F2kAAAD3AAAwG7%2FwAARCAvQD8ADASIAAhEBAxEB%2F8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL%2F8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4%2BTl5ufo6erx8vP09fb3%2BPn6%2F8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL%2F8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3%2BPn6%2F9oADAMBAAIRAxEAPwD8aoLF7hZDf3ckkxUhgDxgAdB2%2FLvT2VrYHex2YxjOec%2B1Kv2K2v8Azri3Bkf%2FAFeAcH05%2FwA%2FrVd9Se3vlhuYf3RYZYLkk%2BmenT9a%2BgOcuvHIrZhnYqVC9Og4%2FwAKSTMNu9vHKGjaT5uPbp%2Bn%2FwBao3ubkt%2FooyJGG4txge3qeB%2FOrK2ub1be225IJchzg%2F8A1v8ACgDP1BEEK2guiYiwUAHj%2FP6GrNwzwwswQO4XsvYD9fSporpEZkW2WN8YcFMkn15%2Fzz9KqXlzqcKb7a3VmUgMzdMZpbDTsKoEnzttU7Rjd%2BVWklnhfYk5VsdQaYlstzHIphY3EgGJFx8oHtRBZyWKorZ%2BRgAzAZH5ewpjkOlu7V7ZIi0geBmO12JVzx6%2Buf0ot7xdRsk1CKb96s5YID0XGMdOOp57fSrP2bTJpFluZAwB6bTkn8KbthVtoDLEONynB6cfyoJImRLu7kvchVRQrEjG4jHI%2FwA55zT7O3uJlluJioiVMonGScdOe3T8%2FwAaR7aF1dVDbW%2B7uPHtmpUE1nch7l%2F3RTDQgDH1%2FwDrUAVkuCoVCASenOKlg1S4j02XTIxtEkqsxDZ3Y6dfqeKLC2%2B0281xKq5jcBVyckE9ffHGfr3ogjsYtTFw23oB1wTzXQVEijtbd7KWwWUK8pGVVeD7EjoOP%2F15qV7FoAV%2B1ENgEYOc%2FwCee9OeNRcLHCg%2FeZLEY4%2FxpGggs7uMXV9kSLjaU6dx0%2Fz2oKK%2BoXUEbx2NzF5izDBcrkcfyz%2BVJc3t5YwiGyuAqLhQW5wMdvfp%2BXtWi9jHI6XjIhgRsFANxJx7%2FUfrSSJomoRMsoUIWICE9uCCT%2FkVoZlCWa0S2tLm3tw4VcmMDkkjkjB9%2B1aKzxx28sdhaCJJySUbBPJz%2Fj%2BdVrwW9jcxJAu9Ix8jp0wfpVld0w3ISQB19qlRsBVVXjlVUyN6fNkDgU6dp4UjhNw5NudqxDt3%2FH%2BtNkvbaeVo4ZQzRHB24x2%2FOnMJEaN4pMSPyXBPGPapMx0kEczI7XDCTIwhb7nA%2FKn3xtYHCW8geVF%2BYYIG4%2Bmaq3Nnbeetzjb8w3Ko4xj26VavVtSEMMZVg4JYvnPt04oAZNFaarMun3kq7wMIAuNxPb3zmrEFtOZR5t2FaOJgdxIJ%2FwDr5%2FyKSXdviME6xZO4lRg4Hv8A4eopggaOQG6uQzkkqNpAxTNCG1M8EACQSMATyF44J5qxLFdWmniRZFd5zvIPHHHH%2FwBYUkokuV2QyFQhG7CggjPP%2BfpU7WqSIGYgHPykihIDJsRb2btLNGqTFyWfcTkEnI5%2Bv6mrl0mJh9hsi5dDlnI9%2FwDPp1qW6s4zEGkUMBy2cEU%2B0kt5FeJSY227UYDOcke2OlZAQ2VxJfCRHYmUITnrz6%2B%2FSobqb7OY3v4gVBO3K53ZpNOt5La8mfljuI%2BY%2FpirbGOaYTXMYO1sqMELn8PxquYhqxJdWZ1Bopbm02KqZDYySCOf0pbxbGKLdESCW6Fun1z71De3E8Ej3M%2F%2BpH3FiXBX%2FPp%2BVS2lk01k1zC6FmYAeZggf5%2Fzmr3EKst8EWJrf92vysVGenr%2BlS4tonLRoFcqTgcH%2FPWnQfbYUf7ZcMTgAc8ADt%2FL8hUFub2GARJJkmT77L2yB6UgHm3tZpEm853cEF
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:255)
        at com.example.wit.Celeb$celebs.doInBackground(Celeb.java:99)
        at com.example.wit.Celeb$celebs.doInBackground(Celeb.java:51)
        at android.os.AsyncTask$3.call(AsyncTask.java:378)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

My php code:

<?php
    if (isset($_POST["Image"])) {
      "include connection.php";
      $image = $_POST["Image"];

      $message = exec("/Applications/XAMPP/xamppfiles/htdocs/App/database.py 2>&1 '$imagestr'");
      echo($message);
    }
?>
David Buck
  • 3,752
  • 35
  • 31
  • 35
  • You want to use the POST method and send it as a POST parameter, your base64 won't be received correctly because it isn't correctly url encoded, you don't need to worry about this if you use POST. POST is normally for storing anyway – iJamesPHP2 Mar 15 '20 at 19:06
  • it might also help us if you showed the PHP code as well – ADyson Mar 15 '20 at 19:23

1 Answers1

0

Sending image as base64 encoded string in not an ideal method because GET and POST have character limitation in their request. This will cause 413 request entity too large error.

Best method for sending image to server is using Multipart request from Android.

Take a look at this solution

nitinkumarp
  • 2,120
  • 1
  • 21
  • 30