Загрузить изображение на сервер PHP с JSonParser

1

Я пытаюсь загрузить изображение с помощью моего класса JSONParser. Вот класс:

    public class JSONParser {

    String charset = "UTF-8";
    HttpURLConnection conn;
    DataOutputStream wr;
    StringBuilder result = new StringBuilder();
    URL urlObj;
    JSONObject jObj = null;
    StringBuilder sbParams;
    String paramsString;

    public JSONObject makeHttpRequest(final Context context,String url, String method,
                                      HashMap<String, String> params) {

        sbParams = new StringBuilder();
        int i = 0;
        for (String key : params.keySet()) {
            try {
                if (i != 0){
                    sbParams.append("&");
                }
                sbParams.append(key).append("=")
                        .append(URLEncoder.encode(params.get(key), charset));

            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            i++;
        }

        if (method.equals("POST")) {
            // request method is POST
            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(true);

                conn.setRequestMethod("POST");

                conn.setRequestProperty("Accept-Charset", charset);


                conn.setReadTimeout(10*1000);//orijinal 10000

                conn.setConnectTimeout(15*1000);//orijinal 15000

                conn.connect();

                paramsString = sbParams.toString();

                wr = new DataOutputStream(conn.getOutputStream());
                wr.writeBytes(paramsString);
                wr.flush();
                wr.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else if(method.equals("GET")){
            // request method is GET

            if (sbParams.length() != 0) {
                url += "?" + sbParams.toString();
            }

            try {
                urlObj = new URL(url);

                conn = (HttpURLConnection) urlObj.openConnection();

                conn.setDoOutput(false);

                conn.setRequestMethod("GET");

                conn.setRequestProperty("Accept-Charset", charset);

                conn.setConnectTimeout(15000);

                conn.connect();

            } catch (IOException e) {
                MyMethods.makeToastInAsync(context,context.getResources().getString(R.string.connProblem),Toast.LENGTH_LONG);
                e.printStackTrace();
            }

        }

        try {
            //Receive the response from the server
            InputStream in = new BufferedInputStream(conn.getInputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));

            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }

            Log.d("JSON Parser", "result: " + result.toString());

        } catch (IOException e) {

            MyMethods.makeToastInAsync(context,context.getResources().getString(R.string.connProblem),Toast.LENGTH_LONG);

            e.printStackTrace();
        }

        conn.disconnect();

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(result.toString());
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON Object
        return jObj;
    }
}

Асинхронная часть класса SendImage:

protected JSONObject doInBackground(String... args) {

        try {

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 50, byteArrayOutputStream);
            String encodedImage = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);

            Log.d("Send Image", encodedImage);


            HashMap<String, String> dataTosend = new HashMap<>();
            dataTosend.put("image", encodedImage);
            dataTosend.put("name", sharedPreferences.getString("username", ""));

            JSONObject json = jsonParser.makeHttpRequest(SendImage.this,
                    UPLOAD_IMAGE_URL, "POST", dataTosend);

            if (json != null) {
                Log.d("JSON result", json.toString());

                return json;
            }


        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

Итак, как вы видите, сначала я сжимаю изображение и кодирую base64 и возвращаю String для отправки с помощью JSONParser.

Проблема в том, что я могу отправить изображение, которое не очень большое, но я не могу отправить, если он больше 6 Мб (приблизительно). Я получил эту ошибку:

java.io.FileNotFoundException: http://example.com/uploadImage.php

и ошибка в строке:

   InputStream in = new BufferedInputStream(conn.getInputStream());
(E/JSON Parser: Error parsing data org.json.JSONException: End of input at character 0 of )

По-моему, я получаю исключение JSON, потому что ответа от сервера нет. Но я не могу понять, почему я получаю эту ошибку.

java.io.FileNotFoundException: http://example.com/uploadImage.php

Возможно ли, что сервер не принимает входящий файл больше, чем какой-либо Mb?

EDIT: Когда я изменяю коэффициент сжатия от 50 до 10, я могу загрузить изображение, которое я не мог. Таким образом, я уверен, что ошибка возникает из-за размера изображения.

Эта ошибка возникает до того, как setReadTimeout и setConnectTimeout превысят.

мои коды PHP:

<?php
if (!empty($_POST)) {


$name =$_POST["name"];
$image =$_POST["image"];

$decodedImage= base64_decode("$image");

$resultt=file_put_contents("images/" .$name. ".JPG",$decodedImage);

if($resultt){


    $response["success"] = 1;
        $response["message"] = "".$resultt. "";
        die(json_encode($response));

}
    $response["success"] = 0;
        $response["message"] = "Fail";
        die(json_encode($response));

}



?>
Теги:
image-uploading

1 ответ

0

Может быть, проблема на сервере.

Файл php.ini находится внутри вашего сервера.

PHP имеет несколько параметров конфигурации, чтобы ограничить ресурсы, потребляемые скриптами. По умолчанию PHP установлен для загрузки файлов размером не более 2 МБ.

Попробуйте увеличить следующие значения в php.ini, например:

memory_limit = 32M
upload_max_filesize = 24M
post_max_size = 32M
  • 0
    Я попробую это и напишу здесь. Итак, если проблема в том, как я могу вернуть ответ с сервера? Я хочу передать ответ сервера в JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню