Надеюсь, это простая проблема.
У меня установлен Cakephp MVC для загрузки изображения и сохранения его в таблице базы данных.
Index, View и Add работают как я хочу.
Однако в представлении «Правка» я могу указать, что в записи есть загруженное изображение, которое я могу сохранить для изменения.
Я не смог выяснить, что установить в атрибутах кнопки ввода файла, чтобы показать существующее имя файла.
<div class="imageEdit form">
<?php
echo $this->Form->create('VwImage', array('action' => 'edit', 'type' => 'file') );
echo $this->Form->input('image_category', array(
'options' => $partCat,
'selected' => $this->data['VwImage']['image_category'],
'type'=>'select', 'empty' => '(Choose One)'));
echo $this->Form->input('description');
echo $this->Form->input('image', array( 'value' => $this->data['VwImage']['file_name'],
'type' => 'file'));
echo $this->Form->submit('Save');
echo $this->Form->end();
?>
Код контроллера для редактирования
public function edit( $id = null) {
$this->loadModel('VwPartsCategory');
$partCat= $this->VwPartsCategory->find('list',
array( 'order' => 'short_name ASC' )); // Get parts categories from the database
$this->set('partCat', $partCat);
if(!$id && empty($this->request->data)) {
$this->Session->setFlash('Invalid Id for Image');
$this->redirect(array('action' => 'index'));
}
if (!empty($this->request->data) &&
is_uploaded_file($this->request->data['VwImage']['image']['tmp_name'])) {
$fileData = fread(fopen($this->request->data['VwImage']['image']['tmp_name'], "r"),
$this->request->data['VwImage']['image']['size']);
/** get image information **/
$size = getimagesize($this->request->data['VwImage']['image']['tmp_name']);
$image_width = $size[0];
$image_height = $size[1];
$image_size = $size[3];
$image_type = $size['mime'];
$image_thumb = null;
/** Create a second variable for the thumbnail **/
$thumb_data = $this->request->data['VwImage']['image']['tmp_name'];
$aspect_ratio = (float) ($image_width / $image_height );
$thumb_height = 100;
$thumb_width = $thumb_height * $aspect_ratio;
if($image_type == 'image/jpeg' ) {
$src = ImageCreateFromjpeg($thumb_data);
$destImage = ImageCreateTrueColor($thumb_width, $thumb_height);
ImageCopyResampled($destImage, $src, 0,0,0,0, $thumb_width, $thumb_height, $image_width, $image_height);
ob_start();
imageJPEG($destImage);
$image_thumb = ob_get_contents();
ob_end_clean();
}
if($image_type == 'image/gif' ) {
$src = ImageCreateFromgif($thumb_data);
$destImage = ImageCreateTrueColor($thumb_width, $thumb_height);
ImageCopyResampled($destImage, $src, 0,0,0,0, $thumb_width, $thumb_height, $image_width, $image_height);
ob_start();
imageJPEG($destImage);
$image_thumb = ob_get_contents();
ob_end_clean();
}
if($image_type == 'image/png' ) {
$src = ImageCreateFrompng($thumb_data);
$destImage = ImageCreateTrueColor($thumb_width, $thumb_height);
ImageCopyResampled($destImage, $src, 0,0,0,0, $thumb_width, $thumb_height, $image_width, $image_height);
ob_start();
imageJPEG($destImage);
$image_thumb = ob_get_contents();
ob_end_clean();
}
$this->request->data['VwImage']['file_name'] = $this->request->data['VwImage']['image']['name'];
$this->request->data['VwImage']['file_type'] = $this->request->data['VwImage']['image']['type'];
$this->request->data['VwImage']['size'] = $this->request->data['VwImage']['image']['size'];
$this->request->data['VwImage']['image'] = $fileData;
$this->request->data['VwImage']['id'] = $id;
if(!$image_thumb == null) {
$this->request->data['VwImage']['image_thumb'] = $image_thumb;
$this->request->data['VwImage']['thumb_height'] = $thumb_height;
$this->request->data['VwImage']['thumb_width'] = $thumb_width;
if ($this->VwImage->save($this->request->data)) {
$this->Session->setFlash('This image has been save');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('This Image could not be saved. Please try again.');
}
} else {
$this->Session->setFlash('Unsupported Image Type could not be saved. Please try again.');
}
}
if (empty($this->request->data)) {
$this->request->data = $this->VwImage->read(null, $id);
/** pr($this->request->data); die; **/
}
}
ура
Майк
Эта проблема:
Согласно CakePHP 2.0 книга:
Из-за ограничений самого HTML невозможно установить
значения по умолчанию в полях ввода типа «файл». Каждый раз, когда форма
отображается, значение внутри будет пустым.
Хотя я уверен, что есть способы, которыми вы можете взломать его (с помощью javascript), это нестандартная практика — пытаться установить значение по умолчанию для этого поля. Когда вы выбираете файл с помощью «файлового» ввода, он вставляет путь к локальному файлу. Как бы вы узнали, что это за путь?
Решение:
Вместо этого добавьте строку выше или ниже, которая показывает «предыдущее имя файла» с его именем файла, или, если это изображение, показывает эскиз предыдущего файла.
Других решений пока нет …