Nahrávání obrázku /přílohy) na wedos
- koubi
- Člen | 47
Dobrý den, rád bych vás požádal o pomoc s mým kódem. Hosting mám na wedosu, pokud takhle informace nějak pomůže. Mám formálář, přes který lze připojit přílohu ve formě obrázku. Ale po odeslání formuláře mi vyběhne laděnka s hláškou: Unknown image type or file ‚/data/web/virtuals/58696/virtual/tmp/phprvvslV.png‘ not found..
Pro ukázku zasílám i kousek kódu:
552: if ($values['preview_header']->isOk()) {
553: $name = Strings::random(1, '0-9').Strings::random(9).'.png';
554: echo $values['preview_header']->getTemporaryFile();
555: $image = Image::fromFile($values['preview_header']->getTemporaryFile().'.png');
556: $image->resize(1100, 250, Image::EXACT);
557: $image->save(__DIR__.'/../../../files/service/'.$data['url'].'/'.$name);`
Chyba je na řádku 555. Moc díjy za vaše případně reakce.
- ondraondra81
- Člen | 82
Nejsme si tak uplne jisty, ale podle me by tam nemelo byt to .png na konci. Zkusil bych si v tracy vypsat co ti to dava za hodnotu. (Ctu to na telefonu tak to nemuzu zkusit)
Editoval ondraondra81 (15. 4. 2015 7:16)
- ondraondra81
- Člen | 82
Tak jsem na to koukal, je to jak si myslel.
Já to používám takto:
//nahrani fotek
/**
* Formulář pro MultiUpload
* @return Form
*/
public function createComponentUploadForm()
{
$form = new Form; //($this, $name);
$form->getElementPrototype()->class[] = "ajax";
/*$form->addText("test","Textové políčko")
->addRule(Form::FILLED, "Textové políčko test musí být vyplněno!");*/
// Uploadů můžete do formuláře samozdřejmě přidat více, ale zatím je docela nepříjemná validace a jedna chybka v JS
$form->addMultipleFileUpload("upload", "");
//->addRule("MultipleFileUpload\MultipleFileUpload::validateFilled","Musíte odeslat alespoň jeden soubor!")
//->addRule("MultipleFileUpload\MultipleFileUpload::validateFileSize","Soubory jsou dohromady moc veliké!",100*1024);
$form->addSubmit("odeslat", "Odeslat");
// setup form rendering
$renderer = $form->getRenderer();
$renderer->wrappers['controls']['container'] = NULL;
$renderer->wrappers['pair']['container'] = 'div class=form-group';
$renderer->wrappers['pair']['.error'] = 'has-error';
$renderer->wrappers['control']['container'] = 'div class=col-sm-12';
$renderer->wrappers['label']['container'] = 'div class="col-sm-0 control-label"';
$renderer->wrappers['control']['description'] = 'span class=help-block';
$renderer->wrappers['control']['errorcontainer'] = 'span class=help-block';
// make form and controls compatible with Twitter Bootstrap
$form->getElementPrototype()->class('form-horizontal');
foreach ($form->getControls() as $control) {
if ($control instanceof Controls\Button) {
$control->getControlPrototype()->addClass('btn btn-success');
} elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) {
$control->getControlPrototype()->addClass('form-control');
} elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) {
$control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type);
}
}
// Invalidace snippetů
//$form->onError[] = $this->handleRedrawUploadForm;
$form->onSuccess[] = $this->uploadFormSucceeded;
return $form;
}
/**
* Zpracování Uploadu Fotek
* @param $form Form
*/
public function uploadFormSucceeded($form)
{
$galId = $this->getParameter('galId');
$galleryDir = $this->$galleryDir .DIRECTORY_SEPARATOR.'galerie'.DIRECTORY_SEPARATOR. $galId;
$values = $form->getValues();
$files = $values['upload'];
if (!empty($files) && !is_dir($galleryDir)) {
mkdir($galleryDir, 0755, true);
mkdir($galleryDir . '/thumb', 0755, true);
}
//uložit soubory (před uložením zmenšít na nějakou max velikost
// _Max_Width_ a _Max_Height_
foreach ($files as $file) {
/**
* @var $file \Nette\Http\FileUpload
*/
if ($file->isImage()) {
$image = Image::fromFile($file->getTemporaryFile());
$image->resize(self::_Max_Width_, self::_Max_Height);
$image->save($galleryDir . '/' . $file->getSanitizedName());
/**
* Uložit do databáze
*/
$this->database->table('photos')->insert(array(
"gallery_id" => $galId,
"imgName" => $file->getSanitizedName(),
));
/**
* vytvořit nahledy
*/
$image->resize(self::_Thumb_Size_, self::_Thumb_Size_);
$image->save($galleryDir . '/thumb/' . $file->getSanitizedName());
}
}
$this->flashMessage('Fotografie byly úspěšně nahrány', 'alert alert-success');
$this->handleRedrawUploadForm();
}
osobně si myslím, že používat přímo v kódu .png
není
dobré, navíc v tvém kódu netestuješ jestli to je či není obrázek. Pokud
chceš pak jen .png měl bys to také nějak testovat a případně vyhodit
chybovou hlášku.
Editoval ondraondra81 (15. 4. 2015 7:52)
- petr.jirous
- Člen | 128
Nebylo by lepší to použít takto?
if($file->isImage()) {
$image = $file->toImage();
...
}