Laravel Image Upload Problem Solve #banglalaraveltutorial
- Get link
- X
- Other Apps
image ta laravel er storage folder e store kortece cai. and show kmn kore korbo, details bolun, image er time() and and image type koren jate path small hoy, $imagePath = null; if ($request->hasFile('image')) { $imagePath = $request->file('image')->store('chambers', 'public'); }
ChatGPT said:
বুঝেছি 👍 আপনার ইমেজটা storage/app/public/chambers ফোল্ডারে সেভ করতে চান, এবং সেটা view তে দেখাতে চান।
আমি step by step পুরো প্রসেসটা বলে দিচ্ছি:
1. Storage Link তৈরি করুন
Laravel এ public ফোল্ডার থেকে storage ফোল্ডার অ্যাক্সেস করতে symlink দরকার।
টার্মিনালে রান করুন:
php artisan storage:link
এবার public/storage ফোল্ডার থেকে আপনি সরাসরি storage/app/public এর ফাইলগুলো অ্যাক্সেস করতে পারবেন।
2. ইমেজ আপলোড করার কোড
আপনার দেওয়া কোডের সাথে time() + file extension দিয়ে ফাইলের নাম জেনারেট করা ভালো হবে, যাতে path ছোট থাকে এবং unique হয়।
$imagePath = null;
if ($request->hasFile('image')) {
$imageName = time() . '.' . $request->file('image')->getClientOriginalExtension();
$imagePath = $request->file('image')->storeAs('chambers', $imageName, 'public');
}
👉 এতে ফাইল সেভ হবে এই path এ:
storage/app/public/chambers/1724669932.jpg
3. Database এ path save করা
Controller এ আপনি $model->image = $imagePath; দিয়ে save করবেন।
এতে DB তে শুধু chambers/1724669932.jpg এরকম ছোট path থাকবে।
4. View এ Image Show করা
Blade ফাইলে এভাবে দেখাতে পারবেন:
@if(!empty($chamber->image)) <img src="{{ asset('storage/' . $chamber->image) }}" alt="Chamber Image" width="150"> @endif
👉 এখানে asset('storage/...') automatically public/storage থেকে ফাইল বের করবে।
5. Output Example
ধরা যাক আপনি time() দিয়ে save করেছেন:
chambers/1724669932.png
তাহলে blade এ দেখালে লিঙ্ক হবে:
http://127.0.0.1:8000/storage/chambers/1724669932.png
⚡সারাংশ:
-
php artisan storage:link -
storeAs('chambers', time().'.ext', 'public') -
DB তে path save
-
Blade এ
asset('storage/'.$path)দিয়ে show
আপনি কি চান আমি full controller + model + blade example একসাথে লিখে দিই, যেটা copy-paste করে run করতে পারবেন?
You said:
ChatGPT said:
হ্যাঁ 👍 একদম ঠিক আছে।
আপনি $imagePath যেভাবে বানাচ্ছেন, সেটা storage/app/public/chambers/... এর path (DB তে chambers/xxxx.jpg এরকম save হবে)।
তাহলে আপনার কোডটা কাজ করবে:
Chamber::create([
'name' => $request->name,
'address' => $request->address,
'visiting_hours' => $request->visiting_hours,
'image' => $imagePath, // এখানে শুধু path save হচ্ছে
]);
✅ কিছু জিনিস খেয়াল রাখবেন:
-
Model এ fillable
Chamber model এ নিচের মতো করে রাখতে হবে, নাহলে mass assignment error দিবে:protected $fillable = ['name', 'address', 'visiting_hours', 'image']; -
DB তে column type
DB টেবিলেimagecolumnVARCHAR/stringটাইপ হলে ঠিক আছে।
(Laravel migration এ:$table->string('image')->nullable();) -
View এ image show করার সময়
<img src="{{ asset('storage/' . $chamber->image) }}" width="150" alt="Chamber Image">
👉 সব ঠিক আছে। এখন শুধু নিশ্চিত করুন যে আপনি php artisan storage:link রান করেছেন।
চাইলে আমি full add & show page example (Controller + Blade) বানিয়ে দিতে পারি — চান কি সেটা?
You said:
ChatGPT said:
হ্যাঁ, একদম ঠিকই আসছে 🙂
asset('storage/'.$chamber->image) দিলে আপনার ইমেজ লিঙ্ক হবে এরকমঃ
http://127.0.0.1:8000/storage/chambers/1756182891.jpg
এটাই Laravel-এর expected behavior। কারণ আপনি ফাইলটা সেভ করেছেন 👉
storage/app/public/chambers/...
আর php artisan storage:link করলে এটা public/storage এর সাথে link হয়ে যায়।
তাই সব ইমেজ serve হবে /storage/... URL থেকে।
✅ এখন confirm করার জন্য ব্রাউজারে ওই লিঙ্কটা ওপেন করলে ইমেজ দেখা যাচ্ছে তো?
-
যদি দেখা যায় → সব ঠিক আছে
-
যদি না দেখা যায় → তাহলে হয়তো
-
storage:linkঠিকমতো হয়নি -
অথবা ফাইল আসলে সেভ হয়নি
-
আপনার চাইলে আমি পুরো example দেখাতে পারি (form দিয়ে image upload → DB তে save → view এ show করা)। সেটা বানিয়ে দেব?
You said:
ChatGPT said:
ঠিক আছে 🙂
আপনার সমস্যাটা হচ্ছে — Laravel বলছে public/storage লিঙ্ক আগেই আছে, কিন্তু ইমেজ show হচ্ছে না।
এটা খুব common problem। Step by step fix দেখাই:
1. পুরনো link delete করুন
public/storage ফোল্ডার আসলে একটা shortcut (symlink)।
কখনও কখনও ভুল link থাকলে কাজ করে না।
আপনি ম্যানুয়ালি delete করুন:
-
XAMPP এ গিয়ে 👉
C:\xampp\htdocs\latest-doctor\public\storage -
ওই
storageফোল্ডার (বা shortcut) delete করে দিন।
2. নতুন link create করুন
টার্মিনাল থেকে আবার রান করুন:
php artisan storage:link
এখন Laravel নতুন করে public/storage → storage/app/public pointing করবে।
3. ইমেজ পাথ চেক করুন
আপনার database এ save হয়েছে 👉 chambers/1756182891.jpg
তাহলে view এ show করার জন্যঃ
<img src="{{ asset('storage/'.$chamber->image) }}" width="150" alt="Chamber Image">
URL হবে এরকম:
http://127.0.0.1:8000/storage/chambers/1756182891.jpg
4. Verify file আছে কিনা
গিয়ে চেক করুন:
C:\xampp\htdocs\latest-doctor\storage\app\public\chambers\1756182891.jpg
👉 যদি ওই ফাইল থাকে → ঠিকভাবে show হবে।
👉 যদি ফাইল না থাকে → upload অংশে সমস্যা আছে (store/save সঠিকভাবে হচ্ছে কিনা দেখবেন)।
✅ এভাবে করলে আপনার ইমেজ show করবে।
আপনি চাইলে আমি আপনার জন্য একটা full upload → save → show example (Controller + Blade) লিখে দেই, যাতে আর কোনো confusion না থাকে। দেবো কি?
- Get link
- X
- Other Apps
Comments
Post a Comment