2015-11-23 47 views
2

我試圖讓上傳過程中文件的擴展名,但我得到一個錯誤的擴展路徑信息需要一個字符串:入門上傳文件的yii2

我曾嘗試:

$path_parts = pathinfo($_FILES['evidence']['name']); 
echo $path_parts['extension']; 

如何提取文件的擴展名,例如jpegdocpdf

+0

它是什麼顯示var_dump($ _FILES ['evidence'] ['name])? –

+0

am getting array(size = 1) 0 => string'254700916814.jpg'(length = 16) –

+0

所以你傳遞了一個文件數組。你有名字在$ _FILES ['evidence'] ['name] [0] –

回答

2

這是更好,因爲框架提供的抽象與類yii\web\UploadedFile直接Yii2不使用$_FILES 。還有描述使用上傳文件的separate page in guide

有一個模型的例子。

namespace app\models; 

use yii\base\Model; 
use yii\web\UploadedFile; 

class UploadForm extends Model 
{ 
    /** 
    * @var UploadedFile 
    */ 
    public $imageFile; 

    public function rules() 
    { 
     return [ 
      [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'], 
     ]; 
    } 

    public function upload() 
    { 
     if ($this->validate()) { 
      $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

正如你所看到的,延長使用extension財產($this->imageFile->extension)提取。

還有更多關於表單設置,控制器處理,上傳多個文件的信息。所有這些都可以通過上面提到的鏈接找到。

+0

我通常在yii2 kartik文件輸入中使用ajax上傳,並且文件以$ _FILE形式傳遞 –

+0

根據問題添加相關細節,因爲存在目前狀態中沒有提及它。但是最好使用'UploadedFile'。 – arogachev

2

如果使用yii2卡爾蒂克文件輸入,你可以得到的yii\web\uploadedFile實例這種方式:

$file = UploadedFile::getInstanceByName('evidence'); // Get File Object byName 
// Then you can get extension by this: 
$file->getExtension() 

如果您想驗證文件以及那麼你可以使用FileValidator使用adhoc role

$validator = new FileValidator(['extensions' => ['png','jpg']]); 
if($validator->validate($file, $errors)) { 
    // Validation success now you can save file using $file->saveAs method 
} else { 
    // ToDO with error: print_r($errors); 
} 
+0

使用你的例子後,得到一個錯誤的get->擴展到一個非對象我也添加了使用yii \ web \ UploadedFile; –

+0

請確保您在執行var_dump($ _ FILE ['evidence'])後獲得'$ _FILE ['evidence']' –

+0

中的值'\t array(size = 5) 'name'=> array(size =') 0 => string'254 713 107599 20150705_081219.jpg' 'tmp_name'=> array(size = 1) 0 => string'C:\ wamp \ tmp \ php67CF.tmp'(length = 23) 'error'=> array(size = 1) 0 = > int 0 'size'=> array(size = 1) 0 => int 51 830 –