使用CUploadedFile上传文件的正确方法是什么

aja*_*ybc 6 php yii

我正在按照教程http://www.yiiframework.com/wiki/2/how-to-upload-a-file-using-a-model/上传文件.我写了以下代码:

$menuitem->attributes = $_POST['MenuItems'];
$menuitem->clientId = Yii::app()->user->clientId;
$menuitem->image = CUploadedFile::getInstance($menuitem, 'image');
if($menuitem->save()){
   $menuitem->image->saveAs(
       Yii::app()->getBasePath()."/../../".$menuitem->image->getName()
   );
}
Run Code Online (Sandbox Code Playgroud)

但问题是,如果同一目录中存在同名文件,则文件既不会被覆盖也不会以不同的名称保存.我想要的是新图像说image.jpg,如果存在同名文件,则重命名为:image_1.jpg

可能吗 ?请回复.

sen*_*rio 0

我总是用 md5() 函数重写原始名称。试试这个代码。所有图像都有一个唯一的名称。这将保存您的模型,然后生成一个唯一的名称。并再次保存模型。不是很干净但是可以用!

$menuitem->attributes = $_POST['MenuItems'];
$menuitem->clientId = Yii::app()->user->clientId;
if ($menuitem->save()) {
    $imageName = @$_FILES["MenuItems"]["name"]["image"];
    $uniqueName = (md5($imageName . mktime() . $menuitem->id)) . '.' . (end(explode('.', $imageName)));
    $original = Yii::app()->getBasePath() . "/../../" . $uniqueName;
    $menuitem->image = CUploadedFile::getInstance($menuitem, 'immagine');
    $menuitem->image->saveAs($original);
    $menuitem->image = $uniqueName;
    $menuitem->save();
}
Run Code Online (Sandbox Code Playgroud)