Vytvoření thumbnail při nahrávání Multiupload a změna URL

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Joacim
Člen | 229
+
0
-

Zdravím, používám jkuchar/multiplefileupload a potřeboval bych při ukládání obrázků vytvořit i thumbnail, jaká je nejjednodušší cesta ? Existuje již něco v nette co bych mohl použít.

URL s ID

<a id="create-gallery" class="btn btn-default" href="{$presenter->link('Gallery:add', $gid)}"><i class="fa fa-plus-circle"></i> Přidat nové fotky</a>

GalleryPresenter.php

public function handleFormSuccess(Form $form) {
    $gid = $this->getParameter('gid');

    $data = $form->getValues();
    // Let's pass our data to template
    $this->template->values = $data;
    $queueId = uniqid();
    // Moving uploaded files
    foreach ($data["upload"] AS $file) {
        // Vytvoření háhledu (thumbnail)
        // Uložení záznamů do DB

        // $file je instance HttpUploadedFile
        $newFilePath = \Nette\Environment::expand("%appDir%") . "/../www/img_gallery/" . $gid . "/" . $file->getName();
        // V produkčním módu nepřesunujeme soubory...
        if (!\Nette\Environment::isProduction()) {
            if ($file->move($newFilePath))
                $this->flashMessage("File " . $file->getName() . " was successfully moved!");
            else
                $this->flashMessage("Error while moving file " . $file->getName() . ".");
        }
    }
}

Otázky

  1. Jak vytvořit a uložit thumbnail (mám již svoji třídu, ale je velice složitá), chci nahrávanou forku ořezat na jistou šířku a potom vytvořit náhled který bude mít rozměry např: 400*300
  2. Jak změnit URL adresu, aby bylo ID galerie cool url z /gallery/show?gid=15 → /gallery/show/15/ (jak poté získat Gallery ID ?)
  3. K čemu jsou v jkuchar/multiplefileupload 3 tlačítka, když mohou být jen 2 ? („Přidat soubory“, „Spustit nahrávání“, „Odeslání formuláře“) – když by stačolo použít jen Spustit nahrávání ? Je to tam kvůly použití Ajaxu nebo má tlačítko „Spustit nahrávání i jiný význam“ ?
  4. Jak nejlépe po odeslání formuláře jkuchar/multiplefileupload přesměrovat na stránku kde se budou editovat právě přidané forky ? Přes přesměrování v presenteru nebo existuje nějakej přímej způsob ?
Felix
Nette Core | 1247
+
+1
-

ad 1)

Muzes si vytvorit nejakou sluzbu ImageService a tam to vsechno udelat.

class ImageService {

	function resize(FileUpload $upload) {
		// isImage?? isOk??

		$image = $file->toImage();
		$image->resize($w, $h, $image::SHRINK_ONLY);
		// .. etc.

		$image->save($path);
	}
}

Zalezi jenom na tobe jakou chces pouzit zmensovaci techniku. Viz dokumentace.

ad 2)

$router[] = new Route('gallery/show/<gid [0-9]+>', 'Gallery:show');

ad 3) + 4)

Nepouzivam, tak nemuzu radit.

Joacim
Člen | 229
+
0
-

Takže si vezmu pouze dočasnou adresu obrázku (getTemporaryFile( )).

A ten vložím do konstruktoru

use Nette\Utils\Image;

$image = Image::fromFile($upload->getTemporaryFile());

A poté mohu ořezávat atd:.

Editoval Joacim (10. 8. 2015 9:54)