2015-10-27 10 views
0

我目前正在開發一個表單來上傳文件到我正在處理的服務器上。我可以成功將文件上傳到我的應用程序文件夾之一,而不會出現問題。接下來我要做的是讀取上傳的文件並將其信息添加到數據庫中。要做到這一點,我使用CakePHP的文件API,但我無法讓構造函數工作。這裏是我的代碼CakePHP文件API

<?php 
App::uses('Component', 'Controller'); 
App::uses('String', 'Utility'); 
App::uses('File', 'Utility'); 

class UploadComponent extends Component{ 
    public $max_files = 1; 
    public $filePath; 


    public function upload($data = null){ 

     if(!empty($data)){ 
      if(count ($data) > $this->max_files){ 
       throw new NotFoundException("Error procesando el pedido, el número máximo de archivos aceptados es {$this->max_files}", 1); 
      } 
      foreach($data AS $file){ 
       $filename = $file['name']; 
       $file_tmp_name = $file['tmp_name']; 
       $dir = WWW_ROOT.'files'.DS.'uploads'; 
       $allowed = array('txt'); 
       if(!in_array(substr(strrchr($filename, '.'), 1), $allowed)){ 
        throw new NotFoundException("Error procesando el pedido", 1); 
       }elseif(is_uploaded_file($file_tmp_name)){ 
        move_uploaded_file($file_tmp_name, $dir.DS.String::uuid().$filename); 
        $filePath = $dir.DS.String::uuid().$filename; 
        echo gettype($filePath); 
        $import = new File($filePath); //this line throws an error 

       } 
      } 
     } 
    } 
} 

我很困惑的API說,它收到的string的形式,這是$filePath的路徑,但它說,它的接收陣列。任何想法如何使其工作? 這些都是錯誤的框架顯示:

目錄名()預計參數1是字符串,給定陣列[CORE \蛋糕\實用\ File.php,線87]

is_dir()預計參數1至數組給定[CORE \ Cake \ Utility \ File.php,第88行]

basename()期望參數1爲字符串,數組給定[CORE \ Cake \ Utility \ File.php,第89行]

在此先感謝。

回答

0

我在代碼中看到這個錯誤。糾正這個問題,看看它是否解決了這個問題。

move_uploaded_file($file_tmp_name, $dir.DS.String::uuid().$filename); 
$filePath = $dir.DS.String::uuid().$filename; 

每次你打電話給String::uuid()它給你隨機的uuid。你不會有filePath移動文件的地方。

應該

$filePath = $dir.DS.String::uuid().$filename; 
move_uploaded_file($file_tmp_name, $filePath); 

您也可以使用debug()函數來查看一個變量什麼價值。

debug($filePath); 
+0

謝謝你,那就做到了! –