I've made an upload form using CI.
Now my photos are uploaded in C:\xampp\htdocs\ci_new\uploads*.jpg
I want these images to be accessible from the web, so i can add their path to my database, but when i try to load them via localhost/ci_new/uploads/*.jpg it gives me error - the image files arent there (so im wrong with the folder stuff i guess).
Could you please tell me where do i need to put the images, so the folder could be public for the visitors and so i can fill the path as an url in my database.
This is my upload code if needed:
function do_upload(){
$config['upload_path'] = './uploads';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size']='5000';
$config['max_width'] = '1024';
$config['max_height']= '768';
$this->load->library('upload',$config);
if(!$this->upload->do_upload()) {
$error = array('error'=>$this->upload->display_erros());
$this->load->view('upload_form', $error);
} else {
$data=array('upload_data'=>$this->upload->data());
//$this->db->insert('images', $data);
$this->load->view('upload_success', $data);
print_r($data);
}
}
Thank you.
Make sure you have converted your image file name in order to convert the special characters which is not allowed in URL.
Try:
$filename = explode('.', $filename);
$tmp_filename = str_replace(" ", "_", $filename[0]);
/* replaces space with '-' */
$tmp_filename = preg_replace('/[^A-Za-z0-9\-]/', '_', $tmp_filename);
/* removes special chars */
$tmp_filename = preg_replace('/_+/', '_', $tmp_filename);
/* replaces multiple '_' with single */
$filename = $tmp_filename.
'.'
.$filename[sizeof($filename)-1];
/*Concatenating extension again.*/
Related
I am developing a ad site that anyone able to upload 3 images.
So I am coding to upload that 3 images by adding timestamp in front of their file name to make them unique. I use codeigniter framework and attaching the code below.
when I submitting form data, localhost server shows that images have been saved correctly with some code infornt of image filename. But problem is there are no images saved in relevant image folder in that name and I cannot retrieve that images in next preview advertisement page.
I don't know much about php or codeignitor. Your help is highly appreciated.
$config['upload_path'] = './assets/images/adsimages';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 5120;
$this->load->library('upload',$config);
$this->upload->initialize($config);
if (!$this->upload->do_upload()){
$errors = array('error' => $this->upload->display_errors());
$post_image = 'no_image.jpg';
}
else {
$data = array('upload_data' => $this->upload->data());
$post_image1 = time().$_FILES['userfile1']['name'];
$post_image2 = time().$_FILES['userfile2']['name'];
$post_image3 = time().$_FILES['userfile3']['name'];
}
$result = $this->post_model->adregister($post_image1,$post_image2,$post_image3);
You can append time to 'filename' in config of upload library
$config['file_name'] = time().$_FILES['userfile1']['name'];
Or if you want unique name for all files the simply add
$config['encrypt_name'] = TRUE;
then
$this->load->library('upload', $config);
Try this one:-
$path = pathinfo($_FILES["userfile1"]["name"]);
$image_path = $path['filename'].'_'.time().'.'.$path['extension'];
I've written a possible solution for your code. You haven't shared your full code so you'll have to fill in the gaps yourself and maybe make some changes here and there; Comments are mentioned wherever necessary. See if it helps you.
public function your_function_name(){
// your-code
// your-code
// check if file is uploaded in field1
if(!empty($_FILES['userfile1']['name'])){
// call function to upload file
$userfile1 = $this->upload_file('userfile1');
}
// check if file is uploaded in field2
if(!empty($_FILES['userfile2']['name'])){
$userfile2 = $this->upload_file('userfile2');
}
// check if file is uploaded in field3
if(!empty($_FILES['userfile3']['name'])){
$userfile3 = $this->upload_file('userfile3');
}
$result = $this->post_model->adregister($userfile1, $userfile2, $userfile3);
}
// function to upload file
function upload_file($filename){
$config['file_name'] = time().$_FILES[$filename]['name']; // append time to filename
$config['upload_path'] = './assets/images/adsimages';
$config['allowed_types'] = 'gif|jpg|jpeg|png|GIF|JPG|PNG|JPEG';
$config['max_size'] = 5120;
$this->load->library('upload', $config);
$this->upload->initialize($config);
$uploaded = $this->upload->do_upload($filename);
if ( ! $uploaded ){
$error = array('error' => $this->upload->display_errors());
$file = 'no_image.jpg'; // default file
}else{
$upload_data = $this->upload->data();
$file = $upload_data['file_name']; // uploaded file name
}
return $file; // return filename
}
when i upload a file using do_upload() in code igniter, it uploads the file but it renames it with underscore(_) in the place of blank spaces.
file name to be uploaded: A B C.pdf
file that uploads: A_B_C.pdf
code in controller to upload file:
//$filefeild is the name of folder in which file is to be saved
public function upload_Files($filefeild)
{
//set preferences
$config['upload_path'] = 'assets/bcc/'.$filefeild."/";
$config['allowed_types'] = 'doc|docx|xml|pdf|image|excel|jpg|png|jpeg';
$config['max_size'] = 0;
$config['filname'] = $filenamee = $_FILES[$filefeild]['name'];
$this->upload->initialize($config);
if (!$this->upload->do_upload($filefeild))
{
// case - failure
$upload_error = array('error' => $this->upload->display_errors());
}
else
{
// case - success
$upload_data = $this->upload->data();
$data['success_msg'] = '<div class="alert alert-success text-center">Your file <strong>' . $upload_data['file_name'] . '</strong> was successfully uploaded!</div>';
$filname = $upload_data['file_name'];
return $filenamee;
}
}
IF you see codeigniter's function exist here, you will find following code,
// Remove white spaces in the name
if ($this->remove_spaces === TRUE)
{
$this->file_name = preg_replace('/\s+/', '_', $this->file_name);
}
Which means codeigniter removes spaced and adds _ by default which can be changed by setting config variable. like $config['remove_spaces'] = FALSE;
Secondly if you want your file should be saved with underscors and you get actual name by which file is being saved then in your code you have to make a slight change as described below.
your current code
$config['filname'] = $filenamee = $_FILES[$filefeild]['name'];
Change it to
$config['filname'] = $_FILES[$filefeild]['name'];
and in success scenario get file name from $this->upload->data()
Note: you can find answere here aswell.
i need to store only filename + extension of file when upload and rename done to my databse.my problem is can't get extension.
$new_file_name=date("mdY")."_".time();
$config['upload_path'] = './assets/images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 2048;
$config['max_width'] = 1024;
$config['max_height'] = 768;
$config['file_name'] = $new_file_name;
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload('uploadFile'))
{
$error = array('error' => $this->upload->display_errors());
var_dump($error);
}
else
{
$data = array('upload_data' => $this->upload->data());
var_dump($data);
echo $config['file_name'] . $config['file_ext'];
}
my next question load helper form for ? or need load form to use library form_validation ?
$this->load->helper(array('form')); for ?
$this->load->library('form_validation'); this for validation rule
custom upload filename codeigniter
first you can to explode with (.) in filename, then you get array, then catch the end array with function end().
and last i can to join filename with this date.
$dname = explode(".", $_FILES['gambar']['name']);
$ext = end($dname);
$_FILES['gambar']['name'] = strtolower('fitur_h_'.date('YmdHis').'.'.$ext);
//fitur_h_20200120143157.png //output filename
i hope my answer can help you
After you uploaded the file, you can get its property by:
$saved_file_name = $this->upload->data('file_name');
// will give you the filename along with the extension
If you want to get the file extension before uploading it, use core php:
$file_ext = pathinfo($_FILES["file"]["name"], PATHINFO_EXTENSION);
or to make it clean
$filename= $_FILES["file"]["name"];
$file_ext = pathinfo($filename,PATHINFO_EXTENSION);
Simply use the below code for image name with extension on post to solve issue,
$config['file_name'].$this->upload->data('file_ext')
I was having the same problem and i just figured it out.
I was trying to get the name with this: $this->upload->data('file_name');
but it was always empty, and i just finded out that you need to set something before you can access the data() array.
When your code successfully uploads the file, type this: $data = array('upload_data' => $this->upload->data());
after that, all the data() indexes will be accessible, 'file_name' included. The list with all indexes is in the documentation: https://codeigniter.com/user_guide/libraries/file_uploading.html#preferences
ps: I know it's been 2 years since this post but maybe someone can find it helpful if they stuck with this too.
I know this is too late, still I'm giving the answer.
If you want to get the image extension, then use pathinfo function with PATHINFO_EXTENSION parameter.
eg.
$imageExtention = pathinfo($_FILES["image"]["name"], PATHINFO_EXTENSION);
echo imageExtention;
you can get file name using this code
$file_name = $data['file_name'];
echo $file_name;
and extension for file
$ext = implode('.',$file_name);
echo $ext[1];
<?php if($row->resumes != null){
$attachment= base_url().'uploads/resumes/'.$row->resumes;
echo '<a target="_blank" href="'.$attachment.'">
Show Resume</a>';
}
?>
Suppose, my file name is, my plan.pdf
so, on click of Show Resume then in url it's open like,
../uploads/resumes/my%20plan.pdf
in my resumes folder is store like my plan.pdf
there for 404 Page Not Found error is coming
i tried to using urlencode & urldecode, but it's not working.
I am not sure, but it might be the problem of white-space.
You may use trim() while inserting and retrieving time. or read PHP Manual
It won't work because of the space in the filename. I suggest that you use the Codeigniter upload class if you aren't already and remove any spaces from the file name before uploading.
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['file_name'] = preg_replace('/\s+/', '', $filename); //Remove all whitespace
$this->load->library('upload', $config);
$this->upload->initialize($config);
Once the file has been uploaded you can get the name of the file by doing
$aUploadData = $this->upload->data();
$aUploadData['file_name'];
Then once you have that value you should insert it into your database because that way you will know that the value stored in the database will match the name of the file uploaded
Also as an extra check you should check to see if the file exists before linking to it
<?php if($row->resumes != null) {
if(file_exists(base_url().'uploads/resumes/'.$row->resumes)) {
$attachment= base_url().'uploads/resumes/'.$row->resumes;
echo '<a target="_blank" href="'.$attachment.'">Show Resume</a>';
}
}
?>
Hope that helps
I have the following model(codeigniter) code to upload image and thumbnail.
However the result of image path becomes, images/comfort_big.jpg and images/comfort_big.jpg.jpg.
The thumbnail image picks up the name of image and add .jpg.
I am uploading images/confort_thumb.jpg for thumb.
Can anyone tell me what's wrong please?
if ($_FILES){
$config['upload_path'] = './images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '200';
$config['remove_spaces'] = true;
$config['overwrite'] = false;
$config['max_width'] = '0';
$config['max_height'] = '0';
$this->load->library('upload', $config);
if (strlen($_FILES['image']['name'])){
if(!$this->upload->do_upload('image')){
$this->upload->display_errors();
exit();
}
$image = $this->upload->data();
if ($image['file_name']){
$data['image'] = "images/".$image['file_name'];
}
}
if (strlen($_FILES['thumbnail']['name'])){
if(!$this->upload->do_upload('thumbnail')){
$this->upload->display_errors();
exit();
}
$thumb = $this->upload->data();
if ($thumb['file_name']){
$data['thumbnail'] = "images/".$thumb['file_name'];
}
}
}
I had a quick look at File Uploading Class in the user guide
In the preferences tables it states:
Note:The filename should not include a file extension.
So my guess is that you get the user to name the file
$config['file_name'] = "User defined";
or remove the extension programmatically. Since you know and list the extensions already you could do
$types = array(".gif",".jpg",".png");
$image['file_name'] = str_replace($types , "", $image['file_name'] );
Your problem is that when you create a thumb you are passing the full image.
So it will add another extension to it.
Use Below code to remove extension from file name.
<?php
$filename=$image['file_name'];
$file_name_with_dot = substr($filename,0, strrpos($filename, '.') + 1);
$only_file_name = substr($file_name_with_dot,0,strlen($file_name_with_dot)-1);
?>
Now pass this $only_file_name variable to your thumb function..
It will be better to use automatic thumb creation from main image.
Hope this will help for you.