How to send image along with Text using JSON PHP and store image path in MySQL database.
In this tutorial we are going to upload image on server using AsyncTask and doInBackground task. Sending image to server is very much typical for all the android developers so in this tutorial we are going to create an android application which will upload the selected image online directly to server. We will using PHP script to get and sending image and storing that image to folder and store the image name with its complete path into MySQL database. So here is the complete step by step tutorial for Android Select Image from Gallery Upload to Server example tutorial.
What we are doing in this project :
We are creating a folder named as “images” on our online web hosting server and after that we will create a MySQL database and inside that database we will create a table named as “ImageUpload”. There are three Fields inside that table id, image_data and image_tag . After that we will create android code which will send the selected image to server.
Android Select Image from Gallery Upload to Server example tutorial.
Please add INTERNET permissions and WRITE_EXTERNAL_STORAGE permission to your AndroidManifest.xml file.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Code for MainActivity.java file.
package com.android_examples.imageuploadonserver_android_examplescom; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Base64; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.net.Uri; import android.provider.MediaStore; import android.widget.Toast; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.HashMap; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.HashMap; import java.io.BufferedReader; import java.net.URLEncoder; import java.util.Map; import java.io.BufferedWriter; import java.io.OutputStreamWriter; import java.net.URL; import javax.net.ssl.HttpsURLConnection; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; public class MainActivity extends Activity { Button GetImageFromGalleryButton, UploadImageOnServerButton; ImageView ShowSelectedImage; EditText GetImageName; Bitmap FixBitmap; String ImageTag = "image_tag" ; String ImageName = "image_data" ; String ServerUploadPath ="http://androidblog.esy.es/upload-image-server.php" ; ProgressDialog progressDialog ; ByteArrayOutputStream byteArrayOutputStream ; byte[] byteArray ; String ConvertImage ; String GetImageNameFromEditText; HttpURLConnection httpURLConnection ; URL url; OutputStream outputStream; BufferedWriter bufferedWriter ; int RC ; BufferedReader bufferedReader ; StringBuilder stringBuilder; boolean check = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GetImageFromGalleryButton = (Button)findViewById(R.id.button); UploadImageOnServerButton = (Button)findViewById(R.id.button2); ShowSelectedImage = (ImageView)findViewById(R.id.imageView); GetImageName = (EditText)findViewById(R.id.editText); byteArrayOutputStream = new ByteArrayOutputStream(); GetImageFromGalleryButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Image From Gallery"), 1); } }); UploadImageOnServerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { GetImageNameFromEditText = GetImageName.getText().toString(); UploadImageToServer(); } }); } @Override protected void onActivityResult(int RC, int RQC, Intent I) { super.onActivityResult(RC, RQC, I); if (RC == 1 && RQC == RESULT_OK && I != null && I.getData() != null) { Uri uri = I.getData(); try { FixBitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); ShowSelectedImage.setImageBitmap(FixBitmap); } catch (IOException e) { e.printStackTrace(); } } } public void UploadImageToServer(){ FixBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); byteArray = byteArrayOutputStream.toByteArray(); ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT); class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> { @Override protected void onPreExecute() { super.onPreExecute(); progressDialog = ProgressDialog.show(MainActivity.this,"Image is Uploading","Please Wait",false,false); } @Override protected void onPostExecute(String string1) { super.onPostExecute(string1); progressDialog.dismiss(); Toast.makeText(MainActivity.this,string1,Toast.LENGTH_LONG).show(); } @Override protected String doInBackground(Void... params) { ImageProcessClass imageProcessClass = new ImageProcessClass(); HashMap<String,String> HashMapParams = new HashMap<String,String>(); HashMapParams.put(ImageTag, GetImageNameFromEditText); HashMapParams.put(ImageName, ConvertImage); String FinalData = imageProcessClass.ImageHttpRequest(ServerUploadPath, HashMapParams); return FinalData; } } AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass(); AsyncTaskUploadClassOBJ.execute(); } public class ImageProcessClass{ public String ImageHttpRequest(String requestURL,HashMap<String, String> PData) { StringBuilder stringBuilder = new StringBuilder(); try { url = new URL(requestURL); httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setReadTimeout(20000); httpURLConnection.setConnectTimeout(20000); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); outputStream = httpURLConnection.getOutputStream(); bufferedWriter = new BufferedWriter( new OutputStreamWriter(outputStream, "UTF-8")); bufferedWriter.write(bufferedWriterDataFN(PData)); bufferedWriter.flush(); bufferedWriter.close(); outputStream.close(); RC = httpURLConnection.getResponseCode(); if (RC == HttpsURLConnection.HTTP_OK) { bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); stringBuilder = new StringBuilder(); String RC2; while ((RC2 = bufferedReader.readLine()) != null){ stringBuilder.append(RC2); } } } catch (Exception e) { e.printStackTrace(); } return stringBuilder.toString(); } private String bufferedWriterDataFN(HashMap<String, String> HashMapParams) throws UnsupportedEncodingException { stringBuilder = new StringBuilder(); for (Map.Entry<String, String> KEY : HashMapParams.entrySet()) { if (check) check = false; else stringBuilder.append("&"); stringBuilder.append(URLEncoder.encode(KEY.getKey(), "UTF-8")); stringBuilder.append("="); stringBuilder.append(URLEncoder.encode(KEY.getValue(), "UTF-8")); } return stringBuilder.toString(); } } }
Code for activity_main.xml layout file.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFF9C4" tools:context="com.android_examples.imageuploadonserver_android_examplescom.MainActivity"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="CLICK HERE TO SELECT IMAGE FROM GALLERY" android:id="@+id/button" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="CLICK HERE TO UPLOAD SELECTED IMAGE ON SERVER " android:id="@+id/button2" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_above="@+id/button2" android:layout_centerHorizontal="true" android:hint="Enter Image Name Here" android:gravity="center" /> <ImageView android:layout_width="fill_parent" android:layout_height="270dp" android:id="@+id/imageView" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_above="@+id/editText" /> </RelativeLayout>
Code for AndroidManifest.xml file.