简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM