skip to Main Content

I want to upload the image to the server.

  1. I got the bitmap of the image and encoded it to base64.
  2. I convert the base64 of the image to a string using the encodeToString method.
  3. I post the string to PHP using httpurlconnection. Actually, I got the string from PHP which is not the whole string. I don`t get any error. Please give me feedback!
public String httpURLConnectionPost(final String urlString){    
        String result="";    
        try {
            URL url = new URL(urlString);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setUseCaches(false);
            connection.connect();

            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.download);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] imageBytes = baos.toByteArray();
            String encodedImage = Base64.encodeToString(imageBytes, Base64.NO_CLOSE);

            String body= "image="+encodedImage;

            Log.d("serverPostData","body = " +body);

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
            writer.write(body);
            writer.close();

            int responseCode = connection.getResponseCode();
            if(responseCode == HttpURLConnection.HTTP_OK){
                InputStream inputStream = connection.getInputStream();

                StringBuilder stringBuilder = new StringBuilder();
                String line;

                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
                while ((line = br.readLine()) != null) {
                    stringBuilder .append(line);
                }
                result = stringBuilder .toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

The php got the string and decode it.

<?php

include("mysqli_connect.php");

$image= $_POST['image'];

$a = uniqid() ; 

$ImagePath = "good/$a.JPEG";

$ServerURL = "https://172.30.10.1/$ImagePath";

 $InsertSQL = "INSERT INTO Photoshop(photo) VALUES('$ServerURL')" ;

 if(mysqli_query($connect, $InsertSQL)){
          file_put_contents($ImagePath,base64_decode($image));
          echo $image;          
 }else{
    echo "failed";
}

mysqli_close();
?>

2

Answers


  1. Chosen as BEST ANSWER

    I solved my probelm that the base64 need to replace empty to "+".

    <?php
    
    include("mysqli_connect.php");
    
    $image= $_POST['image'];
    $change =  str_replace(" ","+",$image);
    
    $a = uniqid() ; 
    
    $ImagePath = "good/$a.JPEG";
    
    $ServerURL = "https://172.30.10.1/$ImagePath";
    
     $InsertSQL = "INSERT INTO Photoshop(photo) VALUES('$ServerURL')" ;
    
     if(mysqli_query($connect, $InsertSQL)){
              file_put_contents($ImagePath,base64_decode($change ));
              echo $image;          
     }else{
        echo "failed";
    }
    
    mysqli_close();
    ?>
    

  2. Try this to convert image to base64:

    Uri uri = data.getData();
    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
    String encodedImageData = getEncoded64ImageStringFromBitmap(bitmap);
    

    Now pass the data in API:

     JsonObject data1 = new JsonObject();
     data1.addProperty("imageData", "data:image/png;base64," + encodedImageData);
    

    Now set ImageBitmap:

    image.setImageBitmap(bitmap);
    

    Here is the method:

    private String getEncoded64ImageStringFromBitmap(Bitmap bitmap) {
    
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
        byte[] byteFormat = stream.toByteArray();
        // get the base 64 string
        String imgString = Base64.encodeToString(byteFormat, Base64.NO_WRAP);
    
        return imgString;
    }
    

    And for HttpUrlConnection try this…

    jsonObject = new JSONObject();
    jsonObject.put("imageString", encodedImage);
    String data = jsonObject.toString();
    String yourURL = "yourphpfileurl";
    URL url = new URL(yourURL);
    
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestMethod("POST");
    connection.setFixedLengthStreamingMode(data.getBytes().length);
    connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
    
    OutputStream out = new BufferedOutputStream(connection.getOutputStream());
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
    writer.write(data);
    writer.flush();
    writer.close();
    out.close();
    connection.connect();
    
    InputStream in = new BufferedInputStream(connection.getInputStream());
    BufferedReader reader = new BufferedReader(new InputStreamReader(
                    in, "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
            in.close();
            String result = sb.toString();
            connection.disconnect();
    

    Hope this one will work for you…

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search