#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 /…