Отправка файла на PHP - PullRequest
1 голос
/ 15 марта 2020

В коде Android Studio я открываю камеру и делаю снимок, который могу сохранить. Однако затем я хочу отправить эту картинку JPG на мой код PHP. У меня есть сортировка для отправки строк на PHP, однако, когда я пытаюсь отправить изображение, это не работает. Из-за этого я закодировал свое изображение в строку base64, чтобы попытаться отправить его таким образом, но он все еще не работает.

Java код:

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;
}

ОШИБКА:

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)

Мой php код:

<?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);
    }
?>

1 Ответ

0 голосов
/ 17 марта 2020

Отправка изображения в виде строки, закодированной в base64, не идеальный метод, потому что GET и POST имеют ограничение символов в своем запросе. Это приведет к слишком большой ошибке 413 запроса объекта .

Лучший способ отправки изображения на сервер - это использование составного запроса от Android.

. Посмотрите на это решение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...