Uploading Image to Server – Android Eclipse Version.

By | February 18, 2016

Hi all,

In today’s tutorial I will show you how to send an image to server using POST method in ANDROID.

If you are working in Android studio, then checkout the article here.

Uploading an image to server is a basic requirement in many of our application.
Sending data to server which is using a PHP Script is already explained in this example .
Now in this example I will show you how to send an image file.

For that first we have to read the file, put it in nameValuePairs and then send using HttpPost.

I have already shown you three other methods on uploading a file to server. If you want you can check these posts.

These are for downloading files from the server.

if you want to use the android using php and mysql
please check these posts.

Note

If you are not using Eclipse You may need to add the below to your build.gradle.

android {
useLibrary ‘org.apache.http.legacy’
}

Make easy money with infolinks

Android Source Code

UploadImage.java

package pack.coderzheaven;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.Toast;

public class UploadImage extends Activity {
	InputStream inputStream;
	    @Override
	public void onCreate(Bundle icicle) {
	        super.onCreate(icicle);
	        setContentView(R.layout.main);

	        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);	        ByteArrayOutputStream stream = new ByteArrayOutputStream();
	        bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
	        byte [] byte_arr = stream.toByteArray();
	        String image_str = Base64.encodeBytes(byte_arr);
	        ArrayList<namevaluepair> nameValuePairs = new  ArrayList</namevaluepair><namevaluepair>();

	        nameValuePairs.add(new BasicNameValuePair("image",image_str));

	         Thread t = new Thread(new Runnable() {
			
			@Override
			public void run() {
				  try{
			             HttpClient httpclient = new DefaultHttpClient();
			             HttpPost httppost = new HttpPost("http://10.0.2.2/Upload_image_ANDROID/upload_image.php");
			             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
			             HttpResponse response = httpclient.execute(httppost);
			             String the_string_response = convertResponseToString(response);
			             runOnUiThread(new Runnable() {
				      			
				      			@Override
				      			public void run() {
				      				Toast.makeText(UploadImage.this, "Response " + the_string_response, Toast.LENGTH_LONG).show();		      				
				      			}
				      		});
			             
			         }catch(Exception e){
			        	  runOnUiThread(new Runnable() {
			      			
			      			@Override
			      			public void run() {
			      				Toast.makeText(UploadImage.this, "ERROR " + e.getMessage(), Toast.LENGTH_LONG).show();			      				
			      			}
			      		});
			               System.out.println("Error in http connection "+e.toString());
			         }	
			}
		});
         t.start();
	    }

	    public String convertResponseToString(HttpResponse response) throws IllegalStateException, IOException{

	    	 String res = "";
	    	 StringBuffer buffer = new StringBuffer();
	    	 inputStream = response.getEntity().getContent();
             int contentLength = (int) response.getEntity().getContentLength(); //getting content length…..
              runOnUiThread(new Runnable() {
   			
   			@Override
   			public void run() {
   				Toast.makeText(UploadImage.this, "contentLength : " + contentLength, Toast.LENGTH_LONG).show();	      				
   			}
   		});
         
             if (contentLength < 0){
             }
             else{
	                byte[] data = new byte[512];
	                int len = 0;
	                try
	                {
		                while (-1 != (len = inputStream.read(data)) )
		                {
		                	buffer.append(new String(data, 0, len)); //converting to string and appending  to stringbuffer…..
		                }
	                }
	                catch (IOException e)
	                {
	                	e.printStackTrace();
	                }
	                try
	                {
	                	inputStream.close(); // closing the stream…..
	                }
	                catch (IOException e)
	                {
	                	e.printStackTrace();
	                }
	                res = buffer.toString();	 // converting stringbuffer to string…..

	                runOnUiThread(new Runnable() {
           			
           			@Override
           			public void run() {
           			   Toast.makeText(UploadImage.this, "Result : " + res, Toast.LENGTH_LONG).show();
           			}
           		});
	                //System.out.println("Response => " +  EntityUtils.toString(response.getEntity()));
             }
	         return res;
	    }
}

Note : You should do networks operations inside a thread only.
AND you cannot modify UI elements inside a UIThread only.

Now download a file from here which encodeBytes in Base64 Format. Put this file in the same package of UploadImage.java. See the screenshot.

< Upload Image

Add Base64.java to your project

However you can put in your own package but don’t forget to change the package name otherwise you will get error.

Now the server part.

Create a folder named Upload_image_ANDROID in your htdocs folder and inside that create a file named upload_image.php and copy this code into it.

I am saying the htdocs folder because I am using XAMPP. You change this according to your use.

< ?php
	$base=$_REQUEST['image'];
	 $binary=base64_decode($base);
	header('Content-Type: bitmap; charset=utf-8');
	$file = fopen('uploaded_image.jpg', 'wb');
	fwrite($file, $binary);
	fclose($file);
	echo 'Image upload complete!!, Please check your php file directory……';
?>

Now run your program and check the folder in which your php file resides.
Note: Make sure your server is running.
Here I am uploading the icon image itself.

If you want to upload another file in your SDCARD you have to change this line to give the exact path

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);

For example if I have to upload a file residing in my SDCARD I would change the path like this.

Bitmap bitmap = BitmapFactory.decodeFile(“/sdcard/android.jpg”);

This tutorial explains how to create an SDCARD and start the emulator with the SDCARD
and this tutorial explains how to put file inside your emulator SDCARD

Please send your comments to coderzheaven@gmail.com

You can download the complete Android studio Source Code from here.

Leave a Reply

Your email address will not be published. Required fields are marked *