我试图在上传过程中获取文件的扩展名,但是我收到路径信息需要字符串的错误:
我试过了:
$path_parts = pathinfo($_FILES['evidence']['name']);
echo $path_parts['extension'];
如何提取文件扩展名,例如jpeg
,doc
,pdf
等。
答案 0 :(得分:3)
最好不要在Yii2中直接使用$_FILES
,因为框架提供了类yii\web\UploadedFile的抽象。还有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
)提取扩展程序。
有关于表单设置,控制器处理,上传多个文件的更多信息。所有这些都可以通过上面提到的链接找到。
答案 1 :(得分:2)
如果您使用的是yii2 kartik文件输入,则可以通过以下方式获取yii\web\uploadedFile的实例:
$file = UploadedFile::getInstanceByName('evidence'); // Get File Object byName
// Then you can get extension by this:
$file->getExtension()
如果您还要验证文件,则可以使用FileValidator {/ 3}}使用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);
}