6

ファイルをアップロードするためのチュートリアル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()
   );
}

しかし問題は、同じ名前のファイルが同じディレクトリに存在する場合、ファイルが上書きされたり、別の名前で保存されたりしないことです。私が欲しいのは、同じ名前のファイルが存在する場合、image.jpg という新しい画像を次のように名前変更することです。image_1.jpg

出来ますか ?返信してください。

4

3 に答える 3

1

私はyiiでファイルを簡単にアップロードするための動作を書きました

githubでガイドとダウンロードファイルを見ることができます

于 2012-06-04T08:14:22.507 に答える
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();
}
于 2012-06-03T14:00:38.787 に答える