Не работает загрузка файла на сервер
Не работает данный скрипт только в хуке product_savе. Делал плагин, в нем тот же самый скрипт загрузки - всё пашет, в приложении слайдера тоже. Здесь почему-то нет. Не пойму в чем косяк. При этом сохраняя продукт нормально обновляет мною добавленный столбец в таблице продуктов из <input type="text" name="product[assol_model]" value="{$p.assol_model}">. Сделал это по принципу названия input, поэтому данные в самом хуке не обрабатываю, обрабатыюватся в основном экшене сохранения продукта.
Собственно сам код
// Здесь создаю проверка и создание папки
$model_name = waRequest::post('model_name');
if (is_dir(wa()->getDataPath('data/assol/models/'.$model_name, true)) == false ) { mkdir (wa()->getDataPath('data/assol/models/'.$model_name, true), 0775); }
// здесь грузим фотку
$file = waRequest::file('photo');
try {
$img = $file->waImage()
->resize(100, 100, waImage::INVERSE)
->save(wa()->getDataPath('data/assol/models/', true)."test.jpg");
} catch(Exception $e) {
echo "Файл не является изображением, либо произошла другая ошибка: ".$e->getMessage();
return;
}
Собственно сам код
// Здесь создаю проверка и создание папки
$model_name = waRequest::post('model_name');
if (is_dir(wa()->getDataPath('data/assol/models/'.$model_name, true)) == false ) { mkdir (wa()->getDataPath('data/assol/models/'.$model_name, true), 0775); }
// здесь грузим фотку
$file = waRequest::file('photo');
try {
$img = $file->waImage()
->resize(100, 100, waImage::INVERSE)
->save(wa()->getDataPath('data/assol/models/', true)."test.jpg");
} catch(Exception $e) {
echo "Файл не является изображением, либо произошла другая ошибка: ".$e->getMessage();
return;
}
14 ответов
Если это не поможет, нужно больше информации. Вызывается ли код вообще? Т.е. die('asdf') в начале кода хука. Если вызывается, надо копать ваш код. На первый взгляд всё ок. Если не вызывается - что-то не так с названием хука или в коде приложения, и надо копать там.
Вот код хука backend_product. Всё выводится как нужно. Но файл фотки не подгружается. Вообще планирую грузить архив и распаковывать, но это не заработало, решил проверить тупо с фоткой. Фотка тоже не грузится. Parsing Error.
$product = new shopProduct(waRequest::get('id', 0, waRequest::TYPE_INT));
$product_model = new shopProductModel();
$products = $product_model->order('id')->fetchAll();
foreach ($products as $p) {
if ($p['id'] == $product->id) {
$assol_model = $p['assol_model'];
}
}
return array(
'edit_basics' => '
<div class="field">
<div class="value">
<h1>Добавьте модель дивана созданную в программе Ассоль-Дизайню.</h1>
<div class="field-group">
<div class="field">
<div class="name">Выберите zip архив с файлами модели</div>
<div class="value"><input type="file" name="photo"></div>
</div>
<div class="field">
<div class="name">Название модели</div>
<div class="value"><input type="text" name="product[assol_model]" value="'.$assol_model.'"></div>
<input type="hidden" name="model_name" value="'.$assol_model.'">
</div>
</div>
</div>
</div>',
);
Ищите ошибку в ответе сервера на вкладке Network в FireBug'е или Chrome Devtools.
если это event_handler, то используйте throw $ex. ловить в хендлере ошибку имеет смысл только если надо удалять временные директории/какие-то полусозданные данные.
При вызове хуков обрабатываются исключения и добавляются в логи ошибок.
А отладчик в браузере вам скажет, что в ответ приходит невалидный ответ
Файл не является изображением, либо произошла другая ошибка: ... {status:'ok',data:{...}}
что явно не JSON
при сохранении данных продукта поля type="file" не загружаются - плагины должны самостоятельно загружать их (как образец - посмотрите на загрузку изображений или файлов продуктов), поскольку это более специфичная задача, чем простое сохранение текстовых данных.
if ($file->uploaded()) {
try {
// create waImage
$img = $file->waImage();
} catch(Exception $e) {
throw new Exception(_w("File isn't an image"));
}
$path = wa()->getDataPath('data/assol/models/'.$model_name, true);
$file_name = 'somename.'.$file->extension;
$file->moveTo($path, $file_name);
} else { throw new Exception(_w("File not uploaded")); }
Почему может не подхватывать файл?
Остальные поля формы передаются, обрабатываются,сохраняются, всё ок, а вот файл не загружается.
Ув. разработчики, поясните пожалуйста, в чем может быть проблема.
Код аналогичен описанному выше (от Алексея Кремнева), и та же ошибка - файл не загружен.