Disturb
Disturb

Reputation: 598

Upload image to server from android app not working

I'm trying to write the code to upload images from android app to the server using php. I'm attempting to do it by convert it to Base64 and send it as String

This is the java code:

 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

This is the php code:

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

For some reason it just doesn't work, could someone tell me what is my error please? or guide me in a better approach.

Upvotes: 1

Views: 760

Answers (1)

Umair Adil
Umair Adil

Reputation: 968

Use following class "Base64":

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

Here is the link to that class:

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

Upvotes: 1

Related Questions