I am using codeIgniter file uploading class example https://www.codeigniter.com/user_guide/libraries/file_uploading.html to upload files. In the example after i uploaded files it will show details like below in the upload success view page.
Array
(
[upload_data] => Array
(
[file_name] => VenkataKrishna10.pdf
[file_type] => application/pdf
[file_path] => C:/xampp/htdocs/upload/application/
[full_path] => C:/xampp/htdocs/upload/application/VenkataKrishna10.pdf
[raw_name] => VenkataKrishna10
[orig_name] => VenkataKrishna.pdf
[client_name] => VenkataKrishna.pdf
[file_ext] => .pdf
[file_size] => 83.27
[is_image] =>
[image_width] =>
[image_height] =>
[image_type] =>
[image_size_str] =>
)
)
Afterwards I tried to see entire uploaded data in an array format. My question is how to get full file path from the above array. I know there is a variable full_path but I am not able to get it. Please help me.
From your controller use
echo $data['upload_data']['full_path'];
From your view use
echo $upload_data['full_path'];
Try like this:
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
}
else
{
$data = $this->upload->data();
// $data will contain full inforation
echo "Full path is:". $data['full_path'];
}
From you post, I am assuming that you have given output from print_r of some variable, say $file_detail.
If you want to get the full_path from $file_detail, you have to use
$file_detail['upload_data']['full_path']
The array is returned upon succesful upload, you just need to retrieve the index key:
Controller:
if ( ! $this->upload->do_upload())
{
$data['error'] = $this->upload->display_errors();
}
else
{
$data['upload_data'] = $this->upload_data();
}
$this->load->view('myview', $data);
myview.php
<p>Full path: <?php echo $upload_data['full_path'];?></p>
if you want to delete a file from uploads after inserting into database you can remove file from uploads using unlink($filename)
Related
I successfully uploaded the file based on the "$this->upload->data()" message. However, the file doesn't show up in D:/Drive/webcode/uploads folder. Can anyone help out? Thank you.
***move_uploaded_file() works, but not do_upload
[Codeigniter 3]
View(upload_form.php)
<form method="post" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit" name="submit">
</form>
Controller(Upload)
function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->load->helper('url');
}
public function jobapply()
{
//Show view form
$this->load->view('upload_form');
if($this->input->post('submit')){ //Check submit button
//Confirm file is transfered here
echo basename($_FILES["userfile"]["name"]).'<br>';
//Upload Process
$config['upload_path'] = './upload/';
$this->load->library('upload', $config);
$this->upload->do_upload('userfile');
var_dump(is_dir($config['upload_path'])); //Check if this path exist
//return the uploaded data after executing do_upload()
echo "<br><pre>";
print_r($this->upload->data());
echo "</pre>";
}
}
Output
1969.png
bool(true)
Array
(
[file_name] => 1969.png
[file_type] => image/png
[file_path] => D:/Drive/webcode/uploads/
[full_path] => D:/Drive/webcode/uploads/1969.png
[raw_name] => 1969
[orig_name] =>
[client_name] => 1969.png
[file_ext] => .png
[file_size] => 1217976
[is_image] => 1
[image_width] =>
[image_height] =>
[image_type] =>
[image_size_str] =>
)
Image: Folder is empty
Add $config['allowed_types'] = '*'; and check.
Solved without using CI upload
Just use below in Controller:
$path = './upload/';
$temp = $_FILES['userfile']['tmp_name'];
move_uploaded_file($temp, $path . $name);
echo 'Success';
Thats it, I wouldn't bother if using CI Upload library or not, as long as it works. Cheers.
The file path of the file I'm trying to upload is not stored properly.
My only problem now is, instead of storing this path:
C:/xampp/htdocs/dev/csbrms/upload/file.xlsx
it only stores:
C:/xampp/htdocs/dev/csbrms/upl
this is my code
view.php
<input type = "file" name = "userfile" id="userfile"/>
controller.php
$upload_data = $this->upload->data();
$file_name = $upload_data['file_name'];
$data = array(...
'file_path' => $file_name,
);
model.php
function add_records($data){
try {
$sql = "CALL `sp_add_user_request`(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$result = $this->csbrms->query($sql,$data); // $data included 3 param and binding & query to db
$this->csbrms->close();
} catch (Exception $e) {
echo $e->getMessage();
}
return $result;
}
You are using file_path to store your file info, whereas you probably want to use full_path which will include the path and filename.
$file = $upload_data['full_path'];
You can see all the return fields for the helper function in the docs here:
http://www.codeigniter.com/user_guide/libraries/file_uploading.html#CI_Upload::data
But here is the example return array with the fields you can use:
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
Hope that helps,
Paul.
Check your field size in database. The path is being truncated due to the size of the column/field in the table where the path is being stored.
I'm using codeigniter upload class and I'm trying to upload a csv file.
Here is my PHP code :
public function upload(){
$config['upload_path'] = './csv/';
$config['allowed_types'] = 'csv';
$config['max_size'] = 10240;
$this->upload->initialize($config);
if (!$this->upload->do_upload('file')){
echo "<pre>";
print_r($this->upload->data());
echo "</pre>";
die();
$this->session->set_flashdata('upload_error', $this->upload->display_errors());
redirect('/Customers');
}else{
$this->session->set_flashdata('upload_success', 'Customer list successfully uploaded!');
redirect('/Customers');
}
}
when I upload my csv file I get :
Array
(
[file_name] => mayfile.csv
[file_type] => text/x-fortran
[file_path] => /home/public_html/....
[file_ext] => .csv
[file_size] => 7842
[is_image] =>
[image_width] =>
[image_height] =>
[image_type] =>
[image_size_str] =>
)
The type should be text/csv not text/x-fortran why is that happening?
This is a preview of the csv file data I have uploaded:
[
Thank you
I believe this is a duplicate of:
Detecting a mime type fails in php
In it, the answer states:
Apparently, it scans the start of the file looking for lines that begin with a single C letter plus spaces, which seem to be a Fortran style comment. Thus the false positive:
somecolumn;
C F;
I would recommend reading that answer for further instructions. In this particular case, I'd recommend checking the extension if the mime is returned as Fortran to ensure it's not a CSV. Unfortunately there isn't a cleaner way that I know of.
What I am trying to do is after uploading the file parse the cvs file to the screen with print_r so I can do some things with it. I cannot seem to figure out how you access the file name with the $data. I have tried several things like $file_name, $data['file_name], and $this->data->$file_name. The relevant part is on line 37.
Not sure what I am doing wrong. I have looked at the code igniter documentation for the uploader library but it doesn't be sufficient to answer my question. Thanks for any help!
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
function do_upload()
{
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'csv';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
$this->load->library('getcsv');
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->load->view('upload_success', $data);
echo 'The file name is: '.$file_name;
}
}
}
?>
The filename can be anything you want. This is clearly in the documentation, you might've been reading the wrong page or something:
http://ellislab.com/codeigniter%20/user-guide/libraries/file_uploading.html
file_name: If set CodeIgniter will rename the uploaded file to this name. The extension provided in the file name must also be an allowed file type.
OR:
You can get it from $this->upload->data(), which is an array.
$this->upload->data()
This is a helper function that returns an array containing all of the data related to the file you uploaded. Here is the array prototype:
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
Use the following code :
if($this->upload->do_upload($file)){
//Get uploaded file data here
$allData=$this->upload->data();
$myFile = $allData['file_name'];
}
how to get the new generated file name by codigniter in case if the file already exists?
i am inserting image file into my project (uploads) folder and its name i.e image.png into my database table.
say car.png is the image which exists in my uploads folder. if again i am trying to upload the car.png image, then currently it is saving like car1.png into my uploads folder without replacing the older image. i want to get the new image name i.e. car1.png to save into my db but it actually saving the name which i am sending from my form i.e car.png.
To get the file name i used
$img1=$_FILES['img1']['name'];
//this gives me the name of file which i am uploading from my form i.e car.png
Please help me to solve my problem. Please....
It seems that you're not using file upload class from codeingiter. I advise you to use it because it will solve your problem.
If you a upload a file with the same name and in the options you passed you set overwrite to FALSE, codeigniter will rename your car.png to car1.png (or the next number that's available).
Then if upload was successful it will return an array with all the data related to that file
Array
(
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[client_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
)
As you can see, this way you will get the name of the file even if it changed.
You can read more about File Upload Class and how to implement it here:
http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html
EDIT2
YOu have to name your input files on your view userfile1, userfile2, userfile3 and so on
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
function index()
{
$this->load->view('upload_form', array('error' => ' ' ));
}
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';
$this->load->library('upload', $config);
foreach($_FILES as $key => $value){
if ( ! $this->upload->do_upload($key)){
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
}else{
//This $data is the array I described before
$data = array('upload_data' => $this->upload->data());
//So if you this you will get the file name
$filename = $data['upload_data']['file_name'];
}
}
$this->load->view('upload_success', $data);
}
}
?>