1. Codeigniter Framework (CodeIgniter Framework Tutorial) Basic Tutorials of Codeigniter Framework
  2. কোডইগনাইটার ইনস্টল (CodeIgniter Install Tutorial in Bangla)
  3. How to create First Application in CodeIgniter
  4. কোডইগনাইটারের URL স্ট্রাকচার (structure of codeigniter)
  5. Codeigniter দিয়ে query করা এবং result দেখা (CI Query & Show Results)
  6. Database থেকে Data দেখা (CI Fetch Data from Database)
  7. Model তৈরী এবং কন্ট্রোলারে Access (Create Model & Access in Controller)
  8. Codeigniter দিয়ে ডেটাবেসে data ঢুকানো (CodeIgniter Insert Data to Database)
  9. Form দিয়ে ডেটাবেসের data সম্পাদনা (Data Edit in Database Via Form | Codeigniter Tutorials)
  10. ডেটাবেসের data delete (Data Delete in Database | Codeigniter Tutorials) | SP Foundationbd
  11. Form Validation টিউটোরিয়াল (CI Form Validation Tutorial | Codeigniter Tutorials) | SP Foundation
  12. Form validation tutorials (CI Form Validation Tutorial) - আরও উন্নত validation
  13. Codeigniter bootstrap integration এবং best প্রাকটিস | SP Foundationbd
  14. Codeigniter পেজিনেশন Tutorials (CodeIgniter Pagination Tutorial) | SP Foundationbd
  15. কোডইগনাইটার pagination tutorials (CodeIgniter Pagination Tutorial) - ২য় পদ্ধতিতে pagination
  16. Codeigniter সেশন Management (Session Management CodeIgniter) part one
  17. Codeigniter session ম্যানেজমেন্ট (Session Management CodeIgniter) - সেশন ড্রাইভার part two
  18. কোডইগনাইটার file আপলোড (CodeIgniter File Upload)
  19. কোডইগনাইটার Ajax টিউটোরিয়াল (CodeIgniter Ajax Tutorial) | SP Foundationbd
  20. কোডইগনাইটার URI রাউটিং টিউটোরিয়াল (CodeIgniter URI Routing Bangla Tutorials) | SP Foundationbd
  21. কোডইগনাইটারে একসাথে একাধিক ডেটাবেস ব্যবহার (Use Multiple Database Together in CodeIgniter)

কোডইগনাইটার file আপলোড (CodeIgniter File Upload)

কোডইগনাইটারে file আপলোডের জন্য একটি class আছে নাম "upload" এটা দিয়ে যেকোন file, ছবি ইত্যাদি validation করে upload করা যায়। raw PHP' মত এত বেশি কোড লিখতে হবেনা। শুধু কিছু কনফিগারেশন ঠিক করে দিতে হবে (কন্ট্রোলারে) ব্যাস কাজ শেষ, বাকি সব কাজ ফ্রেমওয়ার্কই করে দিবে। এই টিউটোরিয়াল একটা উদাহরন দেব যেখানে শুধু ছবি আপলোড করা হবে। আপলোড সফল হলে আপলোডকৃত ফাইলের বিভিন্ন তথ্য একটি টেবিলে (ডেটাবেসের) সেভ করে রাখব। আমাদের প্রজেক্টে যে "create" নামে একটা মেথড আছে (Users কন্ট্রোলারে) সেই ফর্মেই একটা নতুন ফাইল আপলোডেরে ফিল্ড করব এবং ডেটাবেসের "users" টেবিলে ফাইলের নাম সেভ করার জন্য একটি নতুন ফিল্ড যোগ করব। সুতরাং এখন আমাদের "users" table টি দেখতে হবে এরকম

এবং আমাদের ফর্মে সব ফিল্ডের নিচে যোগ হবে নিচের কোড

1.<div class="form-group">

2.<label class="col-sm-2 control-label">Avatar</label>

3.<div class="col-sm-8">

4.<input type="file" name="avatar"/>

5.</div>

6.</div>

 আর আগের user তৈরীর কোড ঠিকই থাকবে শুধু কন্ট্রোলারে কিছু পরিবর্তনের মধ্যে একটি হল, file আপলোডের কোড। ফাইল আপলোড হবে কোন ডিরেক্টরিতে শুধু ফাইলের নামটা database save করে রাখব। এটাই proffetional  নিয়ম। ফাইল upload code

01.$config['upload_path'] = './avatars';

02.$config['allowed_types'] = 'gif|jpg|png';

03.$config['max_size'] = 1000;

04.$config['max_width'] = 1024;

05.$config['max_height'] = 768;

06.$this->load->library('upload', $config);

07.if (!$this->upload->do_upload('avatar')) {

08.$this->session->set_flashdata('message', $this->upload->display_errors());

09.$this->load->view('header', $data);

10.$this->load->view('menu');

11.$this->load->view('create');

12.$this->load->view('footer');

13.return;

14.} else {

15.$avatar = $this->upload->data();

16.$avatar_name = $avatar['file_name'];

17.}

এখানে আংশিক code দিলাম। পূর্নাঙ্গ code download লিংক নিচে আছে। $config['upload_path']  এ যে ডিরেক্টরিতে ফাইল রাখতে চান সেটার নাম দিবেন যেমন আমি দিয়েছি "./avatars" অর্থ্যাৎ এটা avatars নামের ডিরেক্টরিতে ফাইলগুলি রাখবে (রুট ডিরেক্টরির avatars ফোল্ডার)। 

 $config['allowed_types'] এখানে দিবেন যে ধরনের ফাইল আপলোড করা যাবে সেগুলির type. যেমন আমি দিয়েছি 'jpg|png|gif' ফলে এই কোড দিয়ে শুধু এই ৩ ধরনেরে ফাইলই আপলোড করা যাবে। যদি ইউজার অন্য কোন ফাইল সিলেক্ট করে তাহলে এরর দেখাবে। যদি চাই যেকোন ফাইল আপলোড করতে পারবে, তাহলে $config['allowed_types'] = '*' এভাবে দিলে হবে।

 $config['max_size'] এই configuration দিয়ে ফাইলের সর্বোচ্চ size কত হবে সেটা ঠিক করা যায়। 1000 এর অর্থ হল 1MB , যদি ২ মেগাবাইট পর্যন্ত আপলোড করতে দিতে চান তাহলে দিবেন 2000 এভাবে।

 $config['max_width'] হল ফাইলের দৈর্ঘ্য আর $config['max_height'] হল ফাইলের উচ্চতা। এগুলি দিয়েছি কেননা আমি শুধু ছবি আপলোড করছি তাই ছবির height, width, size এসব কনফিগারেশনে ঠিক করে দিলাম। এছাড়া আরো অনেক configuration set করে দেয়া যায়।  এগুলি সবগুলির ব্যাখ্যা দিলামনা কারন আমাদের উদ্দেশ্য হল মুল কাজ আলোচনা করা, মুল code বুঝলে এসব configuration ইচ্ছেমত পরিবর্তন/যোগ করা যায়।

 এরপর   $this->load->library('upload', $config); এই line দিয়ে সেটিংগুলি সহ "upload" class টি load করেছি। এবার $this->upload->do_upload('avatar') এখানে এই "do_upload" মেথডের ভিতর প্যারামিটার হিসেবে file input এর নাম (name এট্রিবিউটের মান) দিতে হয়। যেমন আমাদের view ফাইলে দেখুন নাম "avatar" (ফাইল সিলেক্ট ফিল্ডে) আছে। যাইহোক যদি সফলভাবে upload করতে পারে তাহলে $this->upload->do_upload('avatar') এটা TRUE return করবে নতুবা FALSE. 

 সুতরাং ৭ নং লাইনে check করেছি যদি upload ঠিকমত না হয় তাহলে আবার ফর্মটি দেখাবে (দেখুন view file গুলি পূনরায় লোড করেছি)। আর যদি আপলোড হয় তাহলেতো else code ব্লকে ঢুকবে। ঠিকমত আপলোড হলে $this->upload->data(); এই data() method ফাইলটির সব তথ্য রিটার্ন করবে। যদি দেখতে চান কি কি ডেটা রিটার্ন করে তাহলে একটা var_dump() মারতে পারেন। যেমন var_dump($this->upload->data())

আমাদের শুধু ফাইলের নাম দরকার। এটা পাওয়া যাবে "file_name" index দিয়ে যেমন আমরা করেছি।

 1.$avatar = $this->upload->data();

2.$avatar_name = $avatar['file_name'];

ব্যাস ফাইলের নাম $avatar_name এ রেখে দিলাম, এবার শুধু ডেটাবেসে ঢুকিয়ে দিলেই এরপর view ফাইলে  echo base_url('avatars/'.$file_name) দিলেই upload কৃত ফাইলের লিংক পেয়ে গেলেন (ধরুন ডেটাবেস থেকে ফাইলের নাম তুলে সেটা $file_name ভেরিয়েবলে রেখেছেন)। 

 ফাইল আপলোড করতে গিয়ে যদি কোন ভুল হয় তাহলে $this->upload->display_errors() এই লাইনটি ঐ এরর সম্পর্কে তথ্য দিবে। তাই আমরাও message নামে একটি অস্থায়ী session variable তৈরী করে সেখানে এই এরর জমা করেছি এভাবে। যেভাবে session flashdata set করা যায়

1.$this->session->set_flashdata('message', $this->upload->display_errors());

 আর এই এরর যদি হয় তাহলে form submit হবেনা এবং error টি দেখানোর জন্য view ফাইলে (create.php তে) নিচের ব্যবস্থা করা হয়েছে। ফলে এরর হলে কন্ট্রোলারের message সেশন ভেরিয়েবলে জমা করা তথ্যটি দেখাবে। যেকোন ভুল ফাইল সিলেক্ট করে দেখুন এরর দেখাবে। যেমন একটা ওয়ার্ড বা অনেক বড় ফাইল (১মেগা+) সিলেক্ট করে সাবমিট করে দেখুন।

 1.$message = $this->session->flashdata('message');

2.if ($message) {

3.echo '<div class="alert alert-info">' . $message . '</div>';

4.}

এবার পুরো কোডটি download করে দেখুন তাহলে আশা করি সব ক্লিয়ার হবে। এখানে সম্পূর্ন method এবং view ফাইলটি আছে

মুল প্রজেক্টের  create মেথডের কোড এবং create.php ভিউ ফাইল ডাউনলোডকৃত কোড দিয়ে replace করুন। ফাইলগুলিতে অবশ্য কমেন্ট আকারে নির্দেশনা দেয়া আছে কোন কোড কিভাবে রিপ্লেস করতে হবে। আর "users" টেবিলে "avatar" ফিল্ডটি তৈরী করতে ভুলিয়েন না, যেভাবে ছবিতে দেখানো আছে।

 [Upload টিপস]

** ধরুন ইউজার যদি ফাইল select করে তাহলেই ফাইল upload হবে তানাহলে form submit করতে দিবেন, সোজা কথা ফাইল upload আবশ্যক ফিল্ড যদি না রাখতে চান তাহলে যেভাবে check করা যায়

1.if($_FILES && $_FILES['avatar']['name']){

2.//user select file

3.}

 ** <form> ট্যাগে কিন্তু enctype="multipart/form-data" এই এট্রিবিউটটি দিতেই হবে তানাহলে কাজ হবেনা।