Как загрузить файл в cakephp

#cakephp #cakephp-2.0

#cakephp #cakephp-2.0

Вопрос:

Я хочу загрузить изображение с помощью cakephp, и я могу сохранить имя файла в базе данных, но мой файл file не загружается по указанному пути я попробовал приведенный ниже код, но моя проблема не решена

Это мой контроллер

 function editprofile ($id = NULL){
                if(empty($this->data)){
                    $this->data=$this->Signup->read(NULL, $id);
                }
                else{
              $image = $this->data['Signup']['upload image'];
                //allowed image types
                $imageTypes = array("image/gif", "image/jpeg", "image/png");
                //upload folder - make sure to create one in webroot
                $uploadFolder = "upload";
                //full path to upload folder
                $uploadPath = WWW_ROOT . $uploadFolder;
 $imageName = $image['name'];
 if($image['size'] > 2097152){
            $errors[]='File size must be less than 2 MB';
        }   
                //check if image type fits one of allowed types
                if(empty($errors)==true){
            if(is_dir($uploadPath)==false){
                mkdir("$uploadPath", 0700);     // Create directory if it does not exist
            }
            if(is_dir("$uploadPath/".$imageName)==false){
                move_uploaded_file($image['tmp_name'],"$uploadPath/".$imageName);
            }else{                                  // rename the file if another one exist
                $new_dir="$uploadPath/".$imageName.time();
                 rename($image['tmp_name'],$new_dir) ;              
            }

        }

                    if ($this->Signup->save($this->data)) {
                        $this->Session->setFlash($imageName);
                        return $this->redirect(array('action' => 'editprofile',$id));
                    }


                }
                $this->set('languageOptions', array('opt1' => 'Choose Occupuation', 'opt2' => 'Student', 'opt3' => 'Employee'));
    debug($this->Signup->validationErrors);
    debug($this->Signup->getDataSource()->getLog(false, false));
                 //$this->set('title_for_layout', 'Add a post ');
        }
 

Это мое мнение

 echo $this->Form->input('upload image',array( 'type' => 'file' , 'style' => 'margin-left:9%;'));
 

Комментарии:

1. Я порекомендую вам использовать плагин Uploader из milesj.me/code/cakephp/uploader . Это поможет вам сэкономить много кода.

2. Я бы порекомендовал свой собственный плагин 😉 github.com/burzum/cakephp-file-storage Это не только плагин для загрузки, но и комплексное решение для обработки файлов. Потому что то, что я вижу в этом вопросе, является ярким примером того, как НЕ упорядочивать ваши файлы и метаданные.

Ответ №1:

Я сам несколько раз сталкивался с этой проблемой, и чаще всего проблема вызвана деталью, которую я постоянно забываю: установка правильного enctype для формы. Основываясь на вашем коде выше, я не вижу никаких очевидных ошибок, но я не могу видеть, установлен ли enctype в значение multipart/form-data или нет. Попробуйте это при создании формы в представлении (обратите внимание на 'type' => 'file' ):

 echo $this->Form->create('FormName', array('type' => 'file'));
 

Комментарии:

1. Я рекомендую этот довольно хороший учебник по одновременной загрузке нескольких файлов. unselfishideas.blogspot.com/2014/08 /…