লারাভেলে ইমেজ আপলোড এবং সেভ করা

ইমেজ ছাড়া ওয়েব সাইট কল্পনা করা যায়? যায় না। আমরা দেখব কিভাবে ইমেজ আপলোড করা যায় এবং ডিরেক্টরিতে সেভ করা যায়। app > public ফোল্ডারে একটা ফোল্ডার তৈরি করব। upload বা যে কোন নামে। এই ফোল্ডারে আমরা ইমেজ আপলোড করব।
আমরা একটা ভিউ তৈরি করব। যেখানে ফাইল সিলেক্টর ফরম থাকবে। ভিউতে নিচের কোড গুলো যুক্ত করবঃ

<form method="POST" action="/save" enctype="multipart/form-data">

{{ csrf_field() }} 


  <div class="form-group">
    <label for="imagefile">Select image to upload:</label>
      <input type="file"  id="file" name="file" accept="image/*">

  </div>   

  <button type="submit" class="btn btn-default">Submit</button>
</form>

যেমন উপরের কোড গুলো আমরা upload নামক কোন ফাইলে রাখতে পারি। আর তখন রাউট ফাইলে লিখতে পারিঃ

Route::get('/', function () {

return view('upload' );
});

উপরের ফরমের action এ লিখেছি save। ইমেজ সিলেক্ট করে সাবমিটে প্রেস করলে এই url এ যাবে। আর যখন কেউ এই url এ যাবে, তখন আমরা ইমেজ ফাইলটি প্রসেস করব। তার জন্য UploadController নামক একটা কন্ট্রোলার তৈরি করে নিব। কমান্ড লাইনে অটোমেটিক্যালি ফাইলটি তৈরি করতে লিখবঃ

php artisan make:controller UploadController

তারপর তার ভেতর লিখবঃ

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use Illuminate\Support\Facades\Input;

class UploadController extends Controller
{
    public function upload(){

	if(Input::hasFile('file')){

		echo "File Uploaded";
		$file = Input::file('file');
		$file->move('upload', $file->getClientOriginalName());
		echo '<img src="/upload/'.$file->getClientOriginalName() .'"/>';

	}

   }
}

এখানে যা লিখেছি, তা হচ্ছে যখন ইনপুটে দেখব কোন ফাইল রয়েছে, তখন আমরা ফাইলটি move করে upload ডিরেক্টরিতে রাখব।। getClientOriginalName() মানে হচ্ছে অরিজিনাল ফাইলের নাম। আপলোড শেষে আমরা ইমেজটি html ফাইলে দেখিয়েছি।

save রাউটটি যুক্ত করার জন্যঃ

 Route::post('save', '[email protected]');

আমরা যদি একের অধিক ফাইলা আপলোড করতে চাই, তার জন্য html markup লিখতে পারি এভাবেঃ

  <input name="file[]" type="file" multiple />

আর php পার্টে লিখতএ হবে এভাবেঃ

 foreach( Input::file('file') as $file) { 
 $file->move('upload', $file->getClientOriginalName());
 
 }

তাহলে upload ফোল্ডারে ফাইল গুলো আপলোড হবে। আমরা চাইলে লারাভেলের ডিফল্ট স্টোরেজ ফোল্ডারেও আপলোড করতে পারি, তার জন্য লিখতে হবেঃ

Storage::put($file->getClientOriginalName(), file_get_contents($file));

Leave a Reply