I want to store image name with date in folder and database.
For example image name is Desert.png
I want to store in database and folder like this: 2016-08-29Desert.png
$this->upload->do_upload(date('Y-d-m).'photo');
This code does not save image in folder and database.
How to solve this in CodeIgniter
I would advise you to generate a random string along with the name of the file. But from what you asked, the code below should be enough.
$this->load->library('upload');
$imagePath = './images/';
if(!file_exists($imagePath))
mkdir($imagePath, 0777, true);
$name_parts = pathinfo($_FILES['photo']['name']);
$name_full = preg_replace('/\s+/', '', $name_parts['filename']);
$file_name = date('Y-m-d') . '-' . $name_full;
$config['upload_path'] = $imagePath;
$config['file_name'] = $file_name;
$config['allowed_types'] = 'png|bmp|jpg';
$config['max_size'] = '1024'; // 1MB~
$config['overwrite'] = FALSE;
$this->upload->initialize($config);
if($this->upload->do_upload('photo') == FALSE)
return;
I'm brand new to codeigniter and am trying to rename my image to be the next auto incremented number in the table.
I was looking into using
$id = $this->db->insert_id();
But am still unsure how to add 1 to that value and use it for my file name. I've got image resizing all set just need to rename and I'm set.
Any help would be much appreciated!!! Thanks so much!
Controller:
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( !$this->upload->do_upload() )
{
$error = array('error' => $this->upload->display_errors());
redirect('index.php/success');
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->resize($data['upload_data']['full_path'], $data['upload_data']['file_name']);
redirect('index.php/success');
echo $img;
}
// Update Record to save filename
}
function resize($path, $file){
$config['image_library']= 'gd2';
$config['source_image']= $path;
$config['create_thumb']= TRUE;
$config['maintain_ration']= TRUE;
$config['width']= 320;
$config['height']= 196;
$config['new_image']='./uploads/'.$file;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
}
Get the last number of the id column which you have set to auto increment.You can use sql Max() function to that.Then simply add a 1 to that and use it for the image renaming.That's it!!!
In view
<?php echo form_open_multipart('welcome/do_upload');?>
<input type="file" name="userfile" size="20" />
In controler
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['overwrite'] = TRUE;
$config['encrypt_name'] = FALSE;
$config['remove_spaces'] = TRUE;
if ( ! is_dir($config['upload_path']) ) die("THE UPLOAD DIRECTORY DOES NOT EXIST");
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('userfile')) {
echo 'error';
} else {
return array('upload_data' => $this->upload->data());
}
}
And I call this function like this
$this->data['data'] = $this->do_upload();
and view this image:
<ul>
<?php foreach ($data['upload_data'] as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>
I don't know what's the error.
It seems the problem is you send the form request to welcome/do_upload, and call the Welcome::do_upload() method in another one by $this->do_upload().
Hence when you call the $this->do_upload(); within your second method, the $_FILES array would be empty.
And that's why var_dump($data['upload_data']); returns NULL.
If you want to upload the file from welcome/second_method, send the form request to the welcome/second_method where you call $this->do_upload();.
Then change the form helper function (within the View) as follows1:
// Change the 'second_method' to your method name
echo form_open_multipart('welcome/second_method');
File Uploading with CodeIgniter
CodeIgniter has documented the Uploading process very well, by using the File Uploading library.
You could take a look at the sample code in the user guide; And also, in order to get a better understanding of the uploading configs, Check the Config items Explanation section at the end of the manual page.
Also there are couple of articles/samples about the file uploading in CodeIgniter, you might want to consider:
http://code.tutsplus.com/tutorials/how-to-upload-files-with-codeigniter-and-ajax--net-21684
http://runnable.com/UhIc93EfFJEMAADX/how-to-upload-file-in-codeigniter
http://jamshidhashimi.com/image-upload-with-codeigniter-2/
http://code.tutsplus.com/tutorials/how-to-upload-files-with-codeigniter-and-ajax--net-21684
http://hashem.ir/CodeIgniter/libraries/file_uploading.html (CodeIgniter 3.0-dev User Guide)
Just as a side-note: Make sure that you've loaded the url and form helper functions before using the CodeIgniter sample code:
// Load the helper files within the Controller
$this->load->helper('form');
$this->load->helper('url');
// Load the helper files within the application/config/autoload
$autoload['helper'] = array('form', 'url');
1. The form must be "multipart" type for file uploading. Hence you should use `form_open_multipart()` helper function which returns:
``
Simple Image upload in codeigniter
Find below code for easy image upload:
public function doupload()
{
$upload_path="https://localhost/project/profile"
$uid='10'; //creare seperate folder for each user
$upPath=upload_path."/".$uid;
if(!file_exists($upPath))
{
mkdir($upPath, 0777, true);
}
$config = array(
'upload_path' => $upPath,
'allowed_types' => "gif|jpg|png|jpeg",
'overwrite' => TRUE,
'max_size' => "2048000",
'max_height' => "768",
'max_width' => "1024"
);
$this->load->library('upload', $config);
if(!$this->upload->do_upload('userpic'))
{
$data['imageError'] = $this->upload->display_errors();
}
else
{
$imageDetailArray = $this->upload->data();
$image = $imageDetailArray['file_name'];
}
}
//this is the code you have to use in you controller
$config['upload_path'] = './uploads/';
// directory (http://localhost/codeigniter/index.php/your directory)
$config['allowed_types'] = 'gif|jpg|png|jpeg';
//Image type
$config['max_size'] = 0;
// I have chosen max size no limit
$new_name = time() . '-' . $_FILES["txt_file"]['name'];
//Added time function in image name for no duplicate image
$config['file_name'] = $new_name;
//Stored the new name into $config['file_name']
$this->load->library('upload', $config);
if (!$this->upload->do_upload() && !empty($_FILES['txt_file']['name'])) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('production/create_images', $error);
} else {
$upload_data = $this->upload->data();
}
Change the code like this. It works perfectly:
public function uploadImageFile() //gallery insert
{
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$new_image_name = time() . str_replace(str_split(' ()\\/,:*?"<>|'), '',
$_FILES['image_file']['name']);
$config['upload_path'] = 'uploads/gallery/';
$config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
$config['file_name'] = $new_image_name;
$config['max_size'] = '0';
$config['max_width'] = '0';
$config['max_height'] = '0';
$config['$min_width'] = '0';
$config['min_height'] = '0';
$this->load->library('upload', $config);
$upload = $this->upload->do_upload('image_file');
$title=$this->input->post('title');
$value=array('title'=>$title,'image_name'=>
$new_image_name,'crop_name'=>$crop_image_name);}
$image_folder = APPPATH . "../images/owner_profile/" . $_POST ['mob_no'] [0] . $na;
if (isset ( $_FILES ['image'] ) && $_FILES ['image'] ['error'] == 0) {
list ( $a, $b ) = explode ( '.', $_FILES ['image'] ['name'] );
$b = end ( explode ( '.', $_FILES ['image'] ['name'] ) );
$up = move_uploaded_file ( $_FILES ['image'] ['tmp_name'], $image_folder . "." . $b );
$path = ($_POST ['mob_no'] [0] . $na . "." . $b);
Below code for an uploading a single file at a time.
This is correct and perfect to upload a single file.
Read all commented instructions and follow the code.
Definitely, it is worked.
public function upload_file() {
***// Upload folder location***
$config['upload_path'] = './public/upload/';
***// Allowed file type***
$config['allowed_types'] = 'jpg|jpeg|png|pdf';
***// Max size, i will set 2MB***
$config['max_size'] = '2024';
$config['max_width'] = '1024';
$config['max_height'] = '768';
***// load upload library***
$this->load->library('upload', $config);
***// do_upload is the method, to send the particular image and file on that
// particular
// location that is detail in $config['upload_path'].
// In bracks will set name upload, here you need to set input name attribute
// value.***
if($this->upload->do_upload('upload')) {
$data = $this->upload->data();
$post['upload'] = $data['file_name'];
} else {
$error = array('error' => $this->upload->display_errors());
}
}
check $this->upload->initialize($config); this works fine for me
$new_image_name = "imgName".time() . str_replace(str_split(' ()\\/,:*?"<>|'), '',
$_FILES['userfile']['name']);
$config = array();
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|bmp|jpeg';
$config['file_name'] = $new_image_name;
$config['max_size'] = '0';
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png|mp4|jpeg';
$config['file_name'] = url_title("imgsclogo");
$config['max_size'] = '0';
$config['overwrite'] = FALSE;
$this->upload->initialize($config);
$this->upload->do_upload();
$data = $this->upload->data();
}
This is in my controller for file upload
$config['upload_path'] = './assets/images/b2b/banner-agent/';
$config['allowed_types'] = 'gif|jpg|png';
$config['overwrite'] = TRUE;
$config['file_name'] = "$banner2";
$this->load->library('upload', $config);
$this->upload->data();
$this->upload->do_upload();
$this->upload->initialize($config);
is there any wrong with my code? The upload not working.
You can not simply call do_upload method before initializing and setting config variables for the upload class.
You need to modify your code like this:
$config['upload_path'] = './assets/images/b2b/banner-agent/';
$config['allowed_types'] = 'gif|jpg|png';
$config['overwrite'] = TRUE;
$config['file_name'] = $banner2;
$this->load->library('upload'); //initialize
$this->upload->initialize($config); //Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class
$this->upload->do_upload(); // do upload
if($this->upload->do_upload()){
$this->upload->data(); //returns an array containing all of the data related to the file you uploaded.
}
You can consult Codeigniter wiki for that too:
http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html
Hope this helps.
Am having difficulties uploading images with codeigniter it keeps saying that i didn't select a file to upload.
this is my code
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '3000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if (!$this->upload->do_upload()){
echo $this->upload->display_errors();
}else{
echo $this->upload->data();
}
}
it doesn't even send the image to the directory.
try this function instead :
function upload_done() {
$config['overwrite'] = TRUE;
$config['encrypt_name'] = FALSE;
$config['remove_spaces'] = TRUE;
$config['upload_path'] = '/var/www/uploadfiles/'; // use an absolute path
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '0';
if ( ! is_dir($config['upload_path']) ) die("THE UPLOAD DIRECTORY DOES NOT EXIST");
$this->load->library('upload',$config);
if ( ! $this->upload->do_upload() )
{
echo "UPLOAD ERROR ! ".$this->upload->display_errors();
} else {
echo "THE IMAGE HAS BEEN UPLOADED : "; var_dump( $this->upload->data() );
}
}
Make sure your html looks like below.
<input type="file" name="userfile" size="20" />
Codeigniter's upload library assumes the name to be "userfile"
You need to change the call to do_upload() depending on the name you have given the form input. Lets say you have this code in your HTML:
<input type="file" name="image" />
You need to change:
$this->upload->do_upload()
to
$this->upload->do_upload('image')
By default CodeIgniter assumes the name is "userfile".