上传文件Yii copy()函数的第二个参数不能是目录

时间:2013-07-19 02:27:28

标签: upload yii directory lampp

我正在尝试上传文件,但收到此错误消息:

 move_uploaded_file() [<a href='function.move-uploaded-file'>function.move-uploaded-file</a>]: The second argument to copy() function cannot be a directory 

我认为这个文件有问题,但我不知道解决它..

    <?php


    class FileUploadController extends CController {


    public function actionUpload() {
        $model = new FileUpload();
    $form = new CForm('application.views.fileUpload.uploadForm', $model);
        if ($form->submitted('submit') && $form->validate()) {
            $form->model->image = CUploadedFile::getInstance($form->model, 'image');


                  if($model->validate())
            {
                $model->image->saveAs('/opt/lampp/htdocs/upl/images');

            Yii::app()->user->setFlash('success', 'File Uploaded');
            $this->redirect(array('upload'));
            }


        }
        $this->render('upload', array('form' => $form));
    }
}

?>

3 个答案:

答案 0 :(得分:2)

您需要检查'/opt/lampp/htdocs/upl/images'中存在的所有文件并检查相同的命名文件是否可用(如果可用),然后每次只使用额外的“_1”重命名该文件,或者您始终可以上传通过将文件重命名为某个机器名称的文件,请参阅下面的代码,

$name = rand(1000,9999) . time(); // rand(1000,9999) optional
$name = md5($name); //optional
$model->image->saveAs('/opt/lampp/htdocs/upl/images/' . $name . '.jpg');

这是我通常用文件上传的方式,只要您将文件引用保存到数据库或任何文本文件中。

修改

获取扩展程序。

如果你需要获得文件的扩展而不是硬编码,你可以使用$model->image->getExtensionName();它将获得上传文件的扩展名,而不是.(点)

答案 1 :(得分:1)

最后,我自己解决了这个问题:

问题位于行

$model->image->saveAs('/opt/lampp/htdocs/upl/images');

应该是:

$model->image->saveAs('/opt/lampp/htdocs/upl/images/images.jpg');

现在,还有另一个问题:当我上传'新图像'时,它将替换旧文件,我希望上传的文件不会替换旧文件,或者我需要重命名为新文件。有谁知道?

答案 2 :(得分:0)

转到cuploadedfile.php。 用这个

写这个函数
if($this->_error==UPLOAD_ERR_OK)
{
    if($deleteTempFile)
        return move_uploaded_file($this->_tempName,$file."/".$this->getName());
    elseif(is_uploaded_file($this->_tempName))
        return copy($this->_tempName, $file."/".$this->getName());
    else
        return false;
}

谢谢你.........