Laravel: সম্পূর্ণ সহজ CRUD (File Uploads and Storage Folder Basics) | অধ্যায় 10.3

Abu Sayed
3 min readFeb 20, 2024

--

এই ব্লগটি আপনাকে লারাভেল-এ ফাইল আপলোডের বেসিক এবং স্টোরেজ ফোল্ডার ব্যবস্থাপনার মৌলিক বিষয়গুলি বাংলায় বুঝতে সাহায্য করবে। এখানে প্রদত্ত ব্যাখ্যা, উদাহরণ এবং কোড আপনাকে সিআরইউডি অ্যাপ্লিকেশনে ফাইল আপলোডের সাথে পরিচিত করাবে। ( Laravel CRUD: File Uploads and Storage Folder Basics )

এসো আজকে লারাভেলের একটি গুরুত্বপূর্ণ ফিচার নিয়ে আলোচনা করি — ফাইল আপলোড। বলা বাহুল্য, সিআরইউডি অ্যাপ্লিকেশনগুলোতে প্রায়শই ফাইল আপলোডের প্রয়োজন হয়। যেমন, একটি ব্লগ সাইটে ইমেজ আপলোড করতে হবে বা একটি ই-কমার্স সাইটে প্রোডাক্ট ইমেজ আপলোড করতে হবে। আরও অনেক উদাহরণ আছে। সুতরাং, আজকে আমরা এই বিষয়টি নিয়ে আলোচনা করব এবং লারাভেলে কিভাবে ফাইল আপলোড করতে হয় তা দেখব।

স্টোরেজ ফোল্ডার ব্যবস্থাপনা

লারাভেলে ফাইল আপলোডের আগে আমাদের জানতে হবে কিভাবে স্টোরেজ ফোল্ডার ব্যবস্থাপনা করতে হয়। লারাভেলে তিনটি স্টোরেজ ফোল্ডার আছে:

  1. app ফোল্ডার: এই ফোল্ডারে আপনার অ্যাপ্লিকেশনের সাথে সম্পর্কিত ফাইলগুলো রাখতে হবে। যেমন, লগ ফাইল, কেশ ফাইল ইত্যাদি।
  2. public ফোল্ডার: এই ফোল্ডারে আপনি যে সব ফাইল রাখবেন, সেগুলো পাবলিকলি এক্সেস করা যাবে। যেমন, ইমেজ, সিএসএস, জেএস ফাইল ইত্যাদি।
  3. storage ফোল্ডার: এই ফোল্ডারে আপনি যে সব ফাইল রাখবেন, সেগুলো পাবলিকলি এক্সেস করা যাবে না। যেমন, ব্যাকআপ ফাইল, লগ ফাইল ইত্যাদি।

আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী আপনাকে এই তিনটি ফোল্ডারের মধ্যে থেকে যথাযথ ফোল্ডার নির্বাচন করতে হবে।

পাবলিক ফোল্ডার কনফিগার করা

যদি আপনি ফাইলগুলোকে পাবলিকলি এক্সেস করতে চান, তাহলে আপনাকে public ফোল্ডারটি কনফিগার করতে হবে। এজন্য, আপনাকে config/filesystems.php ফাইলটি এডিট করতে হবে এবং links অ্যারেটি থেকে এই লাইনটি আনকমেন্ট করতে হবে:

'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],

এরপর, আপনাকে টার্মিনাল থেকে নিচের কমান্ডটি রান করতে হবে:

php artisan storage:link

এই কমান্ডটি public/storage ডিরেক্টরিটি storage/app/public ডিরেক্টরির সাথে লিঙ্ক করবে। এখন আপনি public/storage ডিরেক্টরিতে যেকোনো ফাইল রাখলে সেটি পাবলিকলি এক্সেস করা যাবে।

স্টোরেজ ফোল্ডার ব্যবহার করার উদাহরণ

নিচের উদাহরণটি দেখুন:

use Illuminate\Support\Facades\Storage;
// ফাইল আপলোড করা
$path = Storage::disk('public')->put('images', $request->file('image'));
// ফাইল ডাউনলোড করা
return Storage::disk('public')->download('images/example.jpg');
// ফাইল ডিলিট করা
Storage::disk('public')->delete('images/example.jpg');

এখানে আমরা Storage ফ্যাসেড ব্যবহার করছি। disk() মেথডটি আমাদের কনফিগারেশন ফাইলের disks অ্যারেটি থেকে একটি ডিস্ক নির্বাচন করতে দিচ্ছে। আমরা public ডিস্কটি নির্বাচন করেছি, যা storage/app/public ডিরেক্টরিটি পয়েন্ট করে।

লারাভেলে ফাইল আপলোড করা

লারাভেলে ফাইল আপলোড করার জন্য আপনাকে নিচের পদক্ষেপগুলো অনুসরণ করতে হবে:

ভিউতে ফর্ম তৈরি করা

প্রথমেই আপনাকে ভিউতে একটি ফর্ম তৈরি করতে হবে। এই ফর্মটিতে একটি ফাইল ইনপুট ফিল্ড থাকতে হবে। উদাহরণস্বরূপ:

<form action="{{ route('upload.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="image">
<button type="submit">আপলোড করুন</button>
</form>

লক্ষ্য করুন, আমরা enctype="multipart/form-data" অ্যাট্রিবিউটটি ব্যবহার করেছি। এটি ফাইল আপলোডের জন্য প্রয়োজন।

কন্ট্রোলারে মেথড তৈরি করা

এরপর, আপনাকে কন্ট্রোলারে একটি মেথড তৈরি করতে হবে যা ফাইল আপলোডের জন্য দায়ী থাকবে। উদাহরণস্বরূপ:

public function store(Request $request)
{
$request->validate([
'image' => 'required|image|max:2048',
]);
    $fileName = time() . '.' . $request->image->extension();
$request->image->move(public_path('images'), $fileName);
return redirect()->route('upload.index')->with('success', 'ইমেজটি সফলভাবে আপলোড করা হয়েছে!');
}

এই কোডে, আমরা প্রথমে ভ্যালিডেশন করছি যে ইনপুটটি একটি ইমেজ ফাইল এবং সাইজটি ২মেগাবাইটের কম। তারপর, আমরা একটি ইউনিক ফাইল নাম তৈরি করছি এবং move() মেথডটি ব্যবহার করে public/images ডিরেক্টরিতে ফাইলটি সরিয়ে দিচ্ছি। শেষ পর্যন্তে, আমরা একটি সফল মেসেজ সহ রিডাইরেক্ট করছি।

এখানে একটু লক্ষ্য করুন, আমরা public_path('images') ব্যবহার করেছি। এটি public/images ডিরেক্টরিটিকে পয়েন্ট করে। আপনি এখানে storage_path('app/public/images') ব্যবহার করতে পারেন যদি আপনি স্টোরেজ ফোল্ডারে ফাইলগুলো রাখতে চান।

রাউট তৈরি করা

শেষ পদক্ষেপটি হল রাউট তৈরি করা। উদাহরণস্বরূপ:

Route::get('/upload', [UploadController::class, 'index'])->name('upload.index');
Route::post('/upload', [UploadController::class, 'store'])->name('upload.store');

এখানে আমরা দুইটি রাউট তৈরি করেছি। একটি GET রাউট যা আপলোড ফর্মটি দেখাবে এবং একটি POST রাউট যা ফাইল আপলোডের জন্য দায়ী থাকবে।

ফাইল আপলোড বিষয়ক অন্যান্য টিপস

  • আপনি একবারে একাধিক ফাইল আপলোড করতে পারেন। এজন্য, ইনপুট ফিল্ডে multiple অ্যাট্রিবিউটটি যুক্ত করতে হবে এবং কন্ট্রোলারে একটু পরিবর্তন করতে হবে।
  • আপনি ফাইলের এক্সটেনশন, সাইজ, টাইপ ইত্যাদি ভ্যালিডেট করতে পারেন। লারাভেলের ভ্যালিডেশন রুলগুলো এই জন্য খুবই উপকারী।
  • আপনি ফাইল আপলোডের সময় কোন ডিরেক্টরিতে সেটি রাখতে চান তা নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, আপনি ইমেজগুলোকে public/images, পিডিএফগুলোকে public/pdfs ডিরেক্টরিতে রাখতে পারেন।
  • আপনি আপলোডকৃত ফাইলের পথ ডাটাবেজে সংরক্ষণ করতে পারেন যাতে পরবর্তীতে সেটি দেখানো বা ডাউনলোড করা যায়।

সারসংক্ষেপ

লারাভেলে ফাইল আপলোডের বিষয়টি খুবই গুরুত্বপূর্ণ এবং প্রায় সব অ্যাপ্লিকেশনেই এর প্রয়োজন হয়। এই ব্লগটিতে আমরা এই বিষয়টি নিয়ে আলোচনা করেছি এবং কিভাবে ফাইল আপলোড করতে হয় তার একটি উদাহরণও দেখেছি। তবে মনে রাখবেন, ফাইল আপলোডের ক্ষেত্রে নিরাপত্তা বিষয়টি খুবই গুরুত্বপূর্ণ। সুতরাং, সর্বদা ভ্যালিডেশন এবং নিরাপত্তা বিষয়গুলো মাথায় রাখবেন।

আশা করি, এই ব্লগটি আপনার কাছে উপকারী হয়েছে।

--

--

Abu Sayed
Abu Sayed

Written by Abu Sayed

Bangladeshi Full Stack Web Dev, Sys Admin & DevOps Engineer. Skills: Data analysis, SQL, Unity, C#. Python, PHP & Laravel. Me on: bd.linkedin.com/in/imabusayed

No responses yet