To upload an image from Android device to online server using PHP, first we need to create a PHP script to handle “post” request and store the image to a folder. So write this simple script on your server:
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $ImageData = $_POST['image_path']; $ImageName = $_POST['image_name']; $ImagePath = "images/$ImageName.png"; file_put_contents($ImagePath,base64_decode($ImageData)); echo "Uploaded!."; } ?>
Make sure you have created a folder called “images” beside this script.
Then here is Java codes for Android:
package com.zofiakreasi.rombong; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; 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.net.HttpURLConnection; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.os.AsyncTask; import android.net.Uri; import android.provider.MediaStore; 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 android.util.Base64; public class MainActivity extends AppCompatActivity { Bitmap bitmap; boolean check = true; ProgressDialog progressDialog; String UploadURL = "http://example.com/upload.php/"; //replace this url with yours. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @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 { bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); } catch (IOException e) { e.printStackTrace(); } } } public void pickAnImage(){ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Pick an Image..."), 1); } public void uploadToServer() { ByteArrayOutputStream byteArrayOutputStreamObject; byteArrayOutputStreamObject = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStreamObject); byte[] byteArrayVar = byteArrayOutputStreamObject.toByteArray(); final String ConvertImage = Base64.encodeToString(byteArrayVar, 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); // Dismiss the progress dialog after done uploading. progressDialog.dismiss(); // Printing uploading success message coming from server on android app. 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("image_name", "SomeImage"); HashMapParams.put("image_path", ConvertImage); String FinalData = imageProcessClass.ImageHttpRequest(UploadURL, 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 url; HttpURLConnection httpURLConnectionObject; OutputStream OutPutStream; BufferedWriter bufferedWriterObject; BufferedReader bufferedReaderObject; int RC; url = new URL(requestURL); httpURLConnectionObject = (HttpURLConnection) url.openConnection(); httpURLConnectionObject.setReadTimeout(19000); httpURLConnectionObject.setConnectTimeout(19000); httpURLConnectionObject.setRequestMethod("POST"); httpURLConnectionObject.setDoInput(true); httpURLConnectionObject.setDoOutput(true); OutPutStream = httpURLConnectionObject.getOutputStream(); bufferedWriterObject = new BufferedWriter(new OutputStreamWriter(OutPutStream, "UTF-8")); bufferedWriterObject.write(bufferedWriterDataFN(PData)); bufferedWriterObject.flush(); bufferedWriterObject.close(); OutPutStream.close(); RC = httpURLConnectionObject.getResponseCode(); if (RC == HttpsURLConnection.HTTP_OK) { bufferedReaderObject = new BufferedReader(new InputStreamReader(httpURLConnectionObject.getInputStream())); stringBuilder = new StringBuilder(); String RC2; while ((RC2 = bufferedReaderObject.readLine()) != null) { stringBuilder.append(RC2); } } } catch (Exception e) { e.printStackTrace(); } return stringBuilder.toString(); } private String bufferedWriterDataFN(HashMap < String, String > HashMapParams) throws UnsupportedEncodingException { StringBuilder stringBuilderObject; stringBuilderObject = new StringBuilder(); for (Map.Entry < String, String > KEY: HashMapParams.entrySet()) { if (check) check = false; else stringBuilderObject.append("&"); stringBuilderObject.append(URLEncoder.encode(KEY.getKey(), "UTF-8")); stringBuilderObject.append("="); stringBuilderObject.append(URLEncoder.encode(KEY.getValue(), "UTF-8")); } return stringBuilderObject.toString(); } } }
To pick an image, call this function: “pickAnImage()” and to upload it call this one: “uploadToServer()”.
This source code is modified and simplified from original source in this link.
What about taking photo?
To take a photo, it’s just like picking an image. You just need to replace ACTION_GET_CONTENT with ACTION_IMAGE_CAPTURE and modify the request code. For more information, check out the codes related to this topic in this link: http://zofiakreasi.com/picking-an-image-and-taking-photo-in-android-java-source-code/