Data from the downloaded file

I have a code with the number of downloaded files in a folder, and I want these files to specify the name, size and URL to the database, but my controller does not work. (Im using CakePHP framework). I want to add data from these files that I upload to the database (all file data), and I got an error.

Mistake:

Notice (8): Undefined index: tmp_namā€ā€‹ā€ā€‹e [APP\Controller\UploadFilesController.php, line 24] 

My controller

 public function uploadFile() { $filename = ''; if ($this->request->is('post')) { // checks for the post values $uploadData = $this->request->data; //print_r($this->request->data); die; foreach($uploadData as $file){ $filename = basename($file['name']); // gets the base name of the uploaded file $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved $filename = $filename; // adding time stamp for the uploaded image for uniqueness $uploadPath = $uploadFolder . DS . $filename; if( !file_exists($uploadFolder) ){ mkdir($uploadFolder); // creates folder if not found } if (!move_uploaded_file($file['tmp_name'], $uploadPath)) { return false; } echo "Sa sisestasid faili: $filename<br>"; } foreach($this->request->data['UploadFile']['file_upload'] as $file){ if (!empty($this->request->data) && is_uploaded_file($this->request->data['UploadFile']['file_upload']['tmp_namβ€Œβ€‹β€Œβ€‹e'])) { //THIS IS LINE 24 $fileData = fread(fopen($this->request->data['UploadFile']['file_upload']['tmp_name'], "r"), $this->request->data['UploadFile']['file_upload']['size']); $this->request->data['UploadFile']['name'] = $this->request->data['UploadFile']['file_upload']['name']; $this->request->data['UploadFile']['size'] = $this->request->data['UploadFile']['file_upload']['size']; $this->request->data['UploadFile']['URL'] = $this->request->data['UploadFile']['file_upload']['tmp_name']; $this->request->data['UploadFile']['data'] = $fileData; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } } } } 

And here is my view file:

 <?php echo $this->Form->create('uploadFile', array( 'type' => 'file')); ?> <div class="input_fields_wrap"> <label for="uploadFilefiles"></label> <input type="file" name="data[]" id="uploadFilefiles"> </div> <button type="button" class="add_field_button">+</button> <br><br> <form name="frm1" method="post" onsubmit="return greeting()"> <input type="submit" value="Submit"> </form> <?php echo $this->Html->script('addFile'); 

If necessary, I can also add an AddFile script.

Here is my table ( upload_files ):

enter image description here

+7
html php mysql cakephp
source share
3 answers

I think this is the best way to do this:

 public function uploadFile() { $filename = ''; if ($this->request->is('post')) { // checks for the post values $uploadData = $this->request->data ['UploadFile']['file_upload']; //print_r($this->request->data); die; foreach($uploadData as $file){ $filename = basename($file['name']); // gets the base name of the uploaded file $uploadFolder = WWW_ROOT. 'files'; // path where the uploaded file has to be saved $filename = $filename; // adding time stamp for the uploaded image for uniqueness $uploadPath = $uploadFolder . DS . $filename; if( !file_exists($uploadFolder) ){ mkdir($uploadFolder); // creates folder if not found } if (!move_uploaded_file($file['tmp_name'], $uploadPath)) { return false; } echo "Sa sisestasid faili: $filename<br>"; $this->request->data['UploadFile']['name'] = $file['name']; $this->request->data['UploadFile']['size'] = $file['size']; $this->request->data['UploadFile']['URL'] = $file['tmp_name']; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } } 

I tried this in my host and its work.

+5
source share

You change the view:

 <input type="file" name="data[UploadFile][file_upload][]" class="form-control" multiple="multiple" id="AuthorAuthorImage"> 

And the controller you get

 $this->request->data['UploadFile']['file_upload'] 

This data is an array with the format:

 array ( [0] => Array ( [name] => 0.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php5896.tmp [error] => 0 [size] => 55125 ) [1] => Array ( [name] => 1.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php5897.tmp [error] => 0 [size] => 49613 ) [2] => Array ( [name] => 1-16.png [type] => image/png [tmp_name] => D:\xampp\tmp\php58A7.tmp [error] => 0 [size] => 1545337 ) ) 

Good luck

+1
source share

As tungbk29 said, $ this-> request-> data ['UploadFile'] ['file_upload'] is an array, so you should change the foreach code like this

 if (!empty($this->request->data['UploadFile']['file_upload'])) { foreach($this->request->data['UploadFile']['file_upload'] as $file){ if (is_uploaded_file($file['tmp_name'])) { $fileData = fread(fopen($file['tmp_name'], "r"), $file['size']); $this->request->data['UploadFile']['name'] = $file['name']; $this->request->data['UploadFile']['size'] = $file['size']; $this->request->data['UploadFile']['URL'] = $file['tmp_name']; $this->request->data['UploadFile']['data'] = $fileData; $this->UploadFile->create(); $this->UploadFile->save($this->request->data); } } } 

Hope this helps again!

+1
source share

All Articles