přejmenování obrázku random vygenerovaným názvem

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

Zdravím.
Chci se zeptat mám udělaný blog + upload obrázku, ale problém je v tom, že když nahraji obrázek 222.png tak mu zůstane jméno 222.png ale já bych potřeboval nechat vygenerovat jméno a přejmenovat ho..
nikde jsem to neviděl, většina to řešila addonama.. ale to já zase moc nechci, protože mně addony občas zlobí :D
a potřeboval bych aby to vygenerovalo například z 222.png na gRxA23vc3s.png a aby se to neopakovalo např. ale tam už bude ta pravděpodobnost malá..
na upload obrázků mám toto:

protected function createComponentAddblogForm() {
	$form = new Form;
	$folder = __DIR__ . '/www/images/upload';
	$form->addMultiUpload('img', 'Soubor:')
	     ->addRule(Form::IMAGE, 'Soubor musí být JPEG, PNG nebo GIF.');
	$form->addHidden('folder', $folder);
	$form->addSubmit('submit', 'Uložit');
	$form->onSuccess[] = array($this, 'AddblogFormSubmitted');
	return $form;
	}
public function AddblogFormSubmitted(Form $form) {
	$values = $form->getValues();
    $file = $values->img;
    $imgUrl =  'images/upload/' . $file->sanitizedName();
    $file->move($imgUrl);
    $this->database->table('posts')->insert(array(
        'username_id' => $this->user->getIdentity()->id,
        'title' => $values->title,
        'game' => $values->game,
        'uvod' => $values->uvod,
        'body' => $values->text,
        'url' => $imgUrl,
        'date' => new Nette\DateTime()
    ));
    $this->flashMessage('Přidáno', 'success');
    $this->redirect(':Admin:Blog:default');
    }

děkuji za odpovědi.

Mysteria
Člen | 797
+
0
-

Možností je více, třeba

$imgUrl =  'images/upload/' . hash_file('sha256', $file->getTemporaryFile());
Altimit
Člen | 82
+
0
-

tak to prý nejde.. aspoň mi..

Call to a member function getTemporaryFile() on array

public function EditorFormSubmitted(Form $form) {
        $values = $form->getValues();
        $file = $values->img;
        $imgUrl =  'images/upload/' . hash_file('sha256', $file->getTemporaryFile());
        $file->move($imgUrl);
        $this->database->table('posts')->insert(array(
            'username_id' => $this->user->getIdentity()->id,
            'title' => $values->title,
            'game' => $values->game,
            'uvod' => $values->uvod,
            'body' => $values->text,
            'url' => $imgUrl,
            'date' => new Nette\DateTime()
        ));
    }
iNviNho
Člen | 352
+
0
-

Takto,

Ak máš jednu tabuľku, kde máš všetky obrázky, tak aj ked mu náhodne vygeneruješ reťazec, tak sa môže stať, že sa jedného dňa vygeneruje ten istý random a premaže sa ti starý obrázok… Lepší practice je robiť veci poriadne, čiže kľudne mu nechaj meno ako má, alebo mu ho vygeneruj, ale následne musíš skontrolovať, či už náhodou tam taký obrázok s tým názvom nie je…

Čiže

<?php
/**
     * Checks if name of image is original, if not it will make it original
     * @return string $name
     */
    public function checkOriginalityOfName() {

	$multimediaNames = $this->multimediaRepository->getFetchPairedNames();
	$i = 1;

	$name = $this->fileUpload->getSanitizedName();

	while (in_array($name, $multimediaNames)) {
	    $name = $i.$name;
	    $i++;
	}

	return $name;

    }
?>

Táto funkcia mi robí to, že ak sa obrázok volá vlado.png a už je v databáze vlado.png, tak mi vráti, že originálne meno bude 1vlado.png :)

Mysteria
Člen | 797
+
0
-

Altimit napsal(a):

tak to prý nejde.. aspoň mi..

Call to a member function getTemporaryFile() on array
\--

Protože používáš MultiUpload, ten vrací array, takže nejdřív to projedeš foreachem a pak na tom fileuploadu to teprve zavoláš.