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 | 1270
+
+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)