Загрузка изображения на сервер из приложения для Android не работает

#php #android #http #image-uploading

#php #Android #http #загрузка изображения

Вопрос:

Я пытаюсь написать код для загрузки изображений из приложения для Android на сервер с помощью php. Я пытаюсь сделать это, преобразовав его в Base64 и отправив в виде строки

Это код Java:

  public class uploadImage extends AsyncTask< String, String, String>{

    Bitmap _image;

    uploadImage(Bitmap image){
        _image = image;
    }

    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection con = null;
        BufferedOutputStream os= null;

        try {

            URL url = new URL("URL_TO_SERVER");
            con = (HttpURLConnection) url.openConnection();

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            _image.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byte_arr = byteArrayOutputStream.toByteArray();
            String _imageEncoded = Base64.encodeToString(byte_arr, Base64.DEFAULT);

            JSONObject jsonObject = new JSONObject();
            jsonObject.put("imageEncoded", _imageEncoded);
            String message = jsonObject.toString();

            con.setDoOutput(true);
            con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            con.setRequestProperty("X-Requested-With", "XMLHttpRequest");
            con.connect();

            os = new BufferedOutputStream(con.getOutputStream());
            os.write(message.getBytes());
            os.flush();

            return "";


        }  catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        finally {
            if (con != null)
                con.disconnect();
            if (os != null)
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
    }
}//uploadImage
  

Это php-код:

 <?php
$json = file_get_contents('php://input');
$obj = json_decode($json);  
$imageEncoded = $obj->{"imageEncoded"}

$image = base64_decode("$imageEncoded");

$alterName = rand();
$target= $_SERVER['DOCUMENT_ROOT']."/imagenes/";
$new_img_path =$target.$alterName.".jpg";               

file_put_contents( $new_img_path, $image );?>
  

По какой-то причине это просто не работает, может кто-нибудь сказать мне, в чем моя ошибка, пожалуйста? или укажите мне лучший подход.

Комментарии:

1. вы можете загрузить изображение с помощью multipart.

2. Но это не помешало бы мне отправлять данные в формате JSON? Или вы предлагаете это тоже изменить?

3. Опубликовать logcat с журналами

4. попробуйте мою библиотеку amitshekhariitbhu.github.io/Fast-Android-Networking

Ответ №1:

Используйте следующий класс «Base64»:

     ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    yourBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outStream);
    byte[] bArray = outStream.toByteArray();
    String imgEncoding = Base64.encodeBytes(bArray);
  

Вот ссылка на этот класс:

https://sourceforge.net/projects/iharder/files/base64/2.3/Base64-v2.3.7.zip/download