上传文件中的数据

Data from uploaded file

我有一个代码,其中包含上传到文件夹中的文件数量,我希望将这些文件的名称、大小和 URL 存入数据库,但我的控制器无法正常工作。 (我正在使用 CakePHP 框架)。我想将这些文件数据添加到数据库中(所有文件数据),但出现错误。

错误:

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

我的控制器

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);
                }
            }
         }
     }    
    }

这是我的视图文件:

<?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');

如果需要我也可以添加AddFile脚本。

这是我的 table (upload_files) 结构:

您的看法发生了变化:

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

你得到控制器

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

此数据是数组,格式为:

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
)
)

祝你好运!

正如 tungbk29 所说,$this->request->data['UploadFile']['file_upload'] 是数组,所以你应该像这样更改 foreach 代码

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);
          }
     }
}

希望再次对您有所帮助!

我认为这是最好的方法:

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);
            }           
        }
    }

我在我的主机上试过这个并且它工作正常。