- User Profile Photo Upload
- Product Image Upload
- Document Upload
- Chat Application Image Sharing
- Practice Project এবং Learning Purpose
Step 1: Base64 কী?
Base64 হলো এমন একটি Encoding System যা Binary Data (যেমন Image) কে Text/String এ রূপান্তর করে। উদাহরণ:
Image File
↓
Base64 Encode
↓
String
↓
Send through API
যেহেতু Volley String Request এর মাধ্যমে String পাঠানো সহজ, তাই অনেক সময় Image কে Base64 String এ Convert করা হয়।
Step 2: Android Permission
< uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
Android 12 বা তার নিচের জন্য
< uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
AndroidManifest Internet Permisson
< uses-permission android:name="android.permission.INTERNET" >
Step 3: Layout তৈরি
activity_main.xml
< ImageView
android:id="@+id/imageView"
android:layout_width="200dp"
android:layout_height="200dp"
/>
< Button
android:id="@+id/btnUpload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Upload"
/>
Step 4: Image কে Bitmap এ Convert করা
ধরা যাক ImageView তে ইতিমধ্যে একটি ছবি আছে।
ImageView imageView = findViewById(R.id.imageView);
Bitmap bitmap =((BitmapDrawable)
imageView.getDrawable()).getBitmap();
ব্যাখ্যা
ImageView এর ভিতরের ছবি বের করে।
getBitmap()
Drawable কে Bitmap এ রূপান্তর করে।
Step 5: Bitmap কে Base64 String এ Convert করা
private String imageToBase64(Bitmap bitmap){
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
bitmap.compress(
Bitmap.CompressFormat.JPEG,
80,
baos
);
byte[] imageBytes = baos.toByteArray();
return Base64.encodeToString(
imageBytes,
Base64.DEFAULT
);
}
Line by Line Explanation1.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Image Data Temporary Memory তে রাখবে।
2.
bitmap.compress(
Bitmap.CompressFormat.JPEG,
80,
baos
);
Bitmap কে JPEG Format এ Convert করবে।
এখানে,
80 মানে Image Quality 80%
3.
byte[] imageBytes = baos.toByteArray();
Image কে Byte Array তে Convert করছে।4.
Base64.encodeToString(
imageBytes,
Base64.DEFAULT
);
Byte Array কে Base64 String এ Convert করছে।
Step 6: Base64 String পাওয়া
String imageString =
imageToBase64(bitmap);
Log.d("IMAGE", imageString);
Output:
/9j/4AAQSkZJRgABAQAAAQABAAD...
এটি সম্পূর্ণ Image এর String Version।
Step 7: PHP API তৈরি
server/upload.php<?php
$image = $_POST['image'];
echo "Received";
?>
প্রথমে শুধু Data Receive হচ্ছে কিনা পরীক্ষা করুন।
Step 8: Android থেকে PHP তে Data পাঠানো
Volley String Request ব্যবহার করে: Volley ব্যবহার করতে চাইলে প্রথমে Dependency যোগ করুন: build.gradle (Module: app)implementation 'com.android.volley:volley:1.2.1'
Base64 String PHP API তে পাঠানোর জন্য Volley StringRequest
String url = "https://yourwebsite.com/upload.php";
StringRequest stringRequest = new StringRequest(
Request.Method.POST,
url,
response -> {
Log.d("SERVER_RESPONSE", response);
},
error -> {
Log.e("VOLLEY_ERROR",
error.toString());
}) {
@Override
protected Map getParams()
throws AuthFailureError {
Map params =
new HashMap<>();
params.put("image", imageString);
return params;
}
};
RequestQueue requestQueue =
Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
Explanation
URL
String url =
"https://yourwebsite.com/upload.php";
এখানে PHP API এর URL দেওয়া হয়েছে।
StringRequest
StringRequest stringRequest
Volley এর মাধ্যমে POST Request তৈরি করা হচ্ছে।
Request.Method.POSTRequest.Method.POST
Data POST Method দিয়ে Server এ পাঠানো হবে।
Success Response
response -> {
Log.d(
"SERVER_RESPONSE",
response
);
}
PHP থেকে যা echo করা হবে তা এখানে পাওয়া যাবে।
উদাহরণ:
<?php
echo "Upload Success";
?>
Output: ->Upload Success
Error Response
error -> {
Log.e(
"VOLLEY_ERROR",
error.toString()
);
}
Server Error বা Network Error হলে এখানে ধরা হবে।
getParams()
@Override
protected Map
getParams()
POST Data তৈরির জন্য ব্যবহার করা হয়।
Data Send
params.put(
"image",
imageString
);
PHP এর
<?php
$_POST['image']
?>
এখানে এই Data পাওয়া যাবে।
Complete Upload Button Example
btnUpload.setOnClickListener(v -> {
Bitmap bitmap =
((BitmapDrawable)
imageView.getDrawable())
.getBitmap();
String imageString =
imageToBase64(bitmap);
uploadImage(imageString);
});
upload Image Class
private void uploadImage(
String imageString) {
String url =
"https://yourwebsite.com/upload.php";
StringRequest request =
new StringRequest(
Request.Method.POST,
url,
response -> {
Toast.makeText(
this,
response,
Toast.LENGTH_SHORT
).show();
},
error -> {
Toast.makeText(
this,
error.toString(),
Toast.LENGTH_SHORT
).show();
}) {
@Override
protected Map
getParams() {
Map
params =
new HashMap<>();
params.put(
"image",
imageString
);
return params;
}
};
Volley.newRequestQueue(this)
.add(request);
}
এভাবেই Base64 String কে Volley এর StringRequest ব্যবহার করে PHP API তে পাঠানো যায়, এবং PHP-তে $_POST['image'] দিয়ে গ্রহণ করা যায়।
Step 9: PHP তে Base64 Image Save করা
upload.php<?php
?>
Explanation<?php
base64_decode($image);
?>
String কে আবার Original Image এ রূপান্তর করে।
<?php
time().'.jpg'
?>
যেমন: -> 1751345678.jpg
<?php
file_put_contents(
"uploads/".$fileName,
$imageData
);
?>
uploads Folder এ Image Save হবে।
Step 10: Database তৈরি
CREATE TABLE images(
id INT AUTO_INCREMENT PRIMARY KEY,
image_name VARCHAR(255)
);
Step 11: Database Connection
db.php<?php
$conn =
new mysqli(
"localhost",
"root",
"",
"my_database"
);
if($conn->connect_error){
die("Connection Failed");
}
?>
Step 12: Image Name Database এ Save করা
upload.php<?php
include "../db.php";
$image =
$_POST['image'];
$imageData =
base64_decode($image);
$fileName =
time().".jpg";
file_put_contents(
"uploads/".$fileName,
$imageData
);
$sql =
"INSERT INTO images(image_name)
VALUES('$fileName')";
$conn->query($sql);
echo "Upload Success";
?>
Step 13: Database এ কী Save হবে?
Table| id | image_name |
|---|---|
| 1 | 1751345678.jpg |
image_name
image_path
image_url
কারণ এতে Database দ্রুত কাজ করে।
Complete Flow Diagram
User Select Image
↓
Bitmap
↓
Base64 Encode
↓
String
↓
POST Request
↓
PHP API
↓
Base64 Decode
↓
Image File
↓
uploads Folder
↓
Save Filename in MySQL
Best Practice
বাস্তব Project এ সাধারণত Base64 ব্যবহার না করে Multipart/Form-Data ব্যবহার করা হয়, কারণ:- Base64 Size প্রায় 33% বেড়ে যায়
- Upload Slow হয়
- Memory বেশি লাগে