jQuery-FileUpload, snadný upload souborů

před rokem

dkoleckar
Člen | 10
+
0
-

Zdravím, přešel jsem z verze 1.2 na 2 a háže mi to error:

User Deprecated
Replace deprecated Nette\Object with trait Nette\SmartObject in C:\xampp\htdocs\tvonfire\vendor\jzechy\jquery-fileupload\src\Template\JavascriptBuilder.php:16

Takto vypadá můj Upload Model:

<?php

namespace App\Model;

use Nette\SmartObject;
use Nette\Utils\FileSystem;
use Zet\FileUpload\Model;

class UploadFilesRepository implements \Zet\FileUpload\Model\IUploadModel {
    use SmartObject;

    /**
     * Zpracování požadavku o smazání souboru.
     * @param $uploaded Hodnota navrácená funkcí save.
     */
    public function remove($uploaded) {


    }

    /**
     * Zpracování přejmenování souboru.
     * @param $upload Hodnota navrácená funkcí save.
     * @param $newName Nové jméno souboru.
     * @return mixed Vlastní návratová hodnota.
     */
    public function rename($upload, $newName) {
        Nette\Utils\FileSystem::rename($upload,"../upload_files/".$newName);
    }

    /**
     * Uložení nahraného souboru.
     * @param \Nette\Http\FileUpload $file
     * @param array $params Pole vlastních hodnot.
     * @return mixed Vlastní navrátová hodnota.
     */
    public function save(\Nette\Http\FileUpload $file, array $params = []) {
        $file->move("../upload_files/".$file->getSanitizedName());
        return $file->getSanitizedName();
    }

}

Nevíte někdo co s tím. Budu rád za každou pomoc

před rokem

JZechy
Člen | 164
+
0
-

@dkoleckar Udělal jsem release 2.0.1, ten už by měl být kompabitilní s aktuálním Nette a PHP 7.2.

před rokem

dkoleckar
Člen | 10
+
0
-

Paráda díky moc

před rokem

dkoleckar
Člen | 10
+
0
-

Ještě dotaz, jaké všechny js (jquery,boostrap) a css includy tento doplněk potřebuje? Uploader se mi normálně zobrazí ale po vybrání souboru se nic neděje… + konzole js mi hlásí Renderer is not defined, ikdyž mám v configu renderer: Zet\FileUpload\Template\Renderer\Bootstrap4Renderer. Což by mu nemělo ani vadit když výchozí bere ten HTML5 renderer…

Díky

Editoval dkoleckar (26. 2. 2018 20:55)

před rokem

JZechy
Člen | 164
+
0
-

@dkoleckar Aplikoval sis následující metody do šablony?

před rokem

dkoleckar
Člen | 10
+
0
-

Ano, můj layout.latte: Záleží nějak na pořadí vložených scriptů? V main.js mám akorát $.nette.init();

<!DOCTYPE html>
<html lang="cs">
<head>
  <meta charset="utf-8">
  <meta name="description" content="neco">
  <meta name="author" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <!--CSS -->
  <link href="{$basePath}/bootstrap.min.css" rel="stylesheet">
  <link href="{$basePath}/style.css" rel="stylesheet">
  <link href="{$basePath}/signin.css" rel="stylesheet">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

  <!--JS -->
  <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
  <script src="{$basePath}/js/jquery.ui.widget.js"></script>
  <script src="{$basePath}/js/nette.ajax.js"></script>
  <script src="{$basePath}/js/main.js"></script>
  <script src="https://nette.github.io/resources/js/netteForms.min.js"></script>
  <script src="https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js"></script>
  <script src="https://npmcdn.com/bootstrap@4.0.0-alpha.5/dist/js/bootstrap.min.js"></script>
  {\Zet\FileUpload\FileUploadControl::getHead($basePath)}
  {\Zet\FileUpload\FileUploadControl::getScripts($basePath)}
  <title>{ifset title}{include title|stripHtml} | {/ifset}Nazev</title>
</head>

<body>
  <div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div>

  {include content}

  <div class="container">

    <footer>
        <p>&copy; Company 2017</p>
    </footer>

  </div>

</body>
</html>

před rokem

JZechy
Člen | 164
+
0
-

@dkoleckar Takhle to vypadá v pořádku, nic bránit by tomu nemělo. Nicméně, píšeš, že sis aktualizoval z 1.2 na 2.0, aktualizoval sis i skripty?

před rokem

dkoleckar
Člen | 10
+
0
-

Které skripty máš na mysli? Komponentu jsem stahnul pomocí composeru takže všechny soubory jsou aktuální. Dokonce jsem z tvého dema stáhnul jquery.ui.widget.js, jquery.min.js takže bych to měl mít stejné. Jenže pořád mi konzole háže ReferenceError: Renderer is not defined. Je to fakt zvláštní, protože předtím (verze 1.2) mi běžela v klidu.

před rokem

JZechy
Člen | 164
+
0
-

@dkoleckar Prohlídni si znova návod na instalaci skriptů, z WWW složky, co je stažená composerem, si znova musíš vykopírovat všechny soubory do své www složky. I skripty na druhou verzi prošli zásadní předělávkou, proto máš tu chybu.

před 11 měsíci

duskohu
Člen | 743
+
0
-

Ahoj skusam sa pouzit novu verziu a mam problem:
config

fileUpload:
    maxFiles: 200
    fileFilter: Zet\FileUpload\Filter\ImageFilter
    uploadModel: NasExt\Framework\FileUpload\UploadModel

form

/** @var FileUploadControl $upload */
$upload = $form->addFileUpload('files');
$upload->setRenderer(Bootstrap3Renderer::class);

a v sablone:

{input files}

Lenze mi to nadava:

add:433 Uncaught ReferenceError: Renderer is not defined
    at add:433
    at HTMLDocument.ready (functions.js:24)

Robim nieco zle?

Editoval duskohu (18. 6. 2018 17:01)

před 11 měsíci

iguana007
Člen | 990
+
0
-

V sablone nevidim neco jako:

{block header}
    {\Zet\FileUpload\FileUploadControl::getHead($basePath)}
{/block}

{block footer}
    {\Zet\FileUpload\FileUploadControl::getScripts($basePath)}
{/block}

před 11 měsíci

duskohu
Člen | 743
+
0
-

iguana007 napsal(a):

V sablone nevidim neco jako:

{block header}
    {\Zet\FileUpload\FileUploadControl::getHead($basePath)}
{/block}

{block footer}
    {\Zet\FileUpload\FileUploadControl::getScripts($basePath)}
{/block}

Mam to v layoute:

{\Zet\FileUpload\FileUploadControl::getHead($basePath)}
{\Zet\FileUpload\FileUploadControl::getScripts($basePath)}

před 11 měsíci

JZechy
Člen | 164
+
+2
-

Nahrál sis do www aktuální JS skripty? Zjevně ne.

před 11 měsíci

duskohu
Člen | 743
+
0
-

@JZechy bingo, dakujem, na tom uplne zabudol, dakujem

před 11 měsíci

cafesk8
Člen | 68
+
0
-

Zdravím,

ad 1) Vypadá to, že tento plugin nepodporuje live-form-validation.js, tzn. že když procházím formulář pomocí TAB a přejedu přes povinné pole uploadu fotografii tak mi to nevyhodí hlášku, že musím nějaké soubory nahrát. Nemáte někdo zkušenost jak toto vyřešit?

ad 2) Když ve formuláři přes upload nahraju fotografie a potom dám odeslat formulář (přes ajax), tak pokud neprojde validací a je v něm nějaká chyba, tak se mi všechny soubory, které jsem před odesláním nahrál zase smažou a musím je nahrát znovu. Nevíte někdo co s tím?

Díky

před 11 měsíci

cafesk8
Člen | 68
+
0
-

Zdravím,

jaká je podpora setRequired u tohoto prvku? Pokud nedám pole pro upload jako povinné, tak mi vše funguje přesně jak má. V momentě kdy přidám setRequired tak se mi nikdy nezavolá onSuccess, z formuláře se mi nahrané fotografie ztratí a pod controllem se mi vypíše hláška, že musím nahrát alespoň 1 fotografii.

presenter

protected function createComponentNewVozidloForm() {
    $form = new Nette\Application\UI\Form;
    $form->setRenderer(new \AlesWita\FormRenderer\BootstrapV4Renderer);
    $form->getElementPrototype()->class = 'ajax';
    $form->addProtection('Vypršel časový limit, odešlete formulář znovu');

    $form->addFileUpload('Fotografie', 5)
        ->setRequired('Musíte vložit alespoň 1 fotografii');

    $form->addText('nv_jmeno', 'Jméno')
        ->addRule(Form::MIN_LENGTH, 'Jméno se musí skládat ze 4 až 20 libovolných znaků.', 4)
        ->addRule(Form::MAX_LENGTH, 'Jméno se musí skládat ze 4 až 20 libovolných znaků.',20)
        ->setAttribute('placeholder', 'Jan Novák')
        ->setRequired('Zadejte prosím Vaše jméno.');

    $form->addSubmit('nv_submit', 'Přidat');

    $form->onSubmit[] = [$this,'handleZkontrolujForm'];
    $form->onSuccess[] = [$this,'handleNewWhatever'];

    return $form;
}


public function handleZkontrolujForm(Form $form) {
    if ($this->isAjax()) {
        $this->redrawControl('formSnippet');
    }
}

public function handleNewWhatever(Form $form) {
    $hodnoty = $form->getValues();

    $this->flashMessage('Váš záznam byl úspěšně vložen.','success');
    $form->reset();

    if ($this->isAjax()) {
        $this->redrawControl('formSnippet');
        $this->redrawControl('flashes');
    }
}

latte

{snippet flashes}
    <div n:if="$flashes" class="float-alerts">
    {foreach $flashes as $flash}
        <div class="alert alert-{$flash->type} alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label=Close><span aria-hidden="true">&times;</span></button>
            {$flash->message}
        </div>
    {/foreach}
    </div>
{/snippet}
{snippet formSnippet}
    {control newVozidloForm}
{/snippet}

upload model

namespace App\Model;

use Nette\SmartObject;
use Nette\Utils\FileSystem;
use Zet\FileUpload\Model;

class UploadFilesRepository implements \Zet\FileUpload\Model\IUploadModel {
    use SmartObject;

    /**
     * Zpracování požadavku o smazání souboru.
     * @param $uploaded Hodnota navrácená funkcí save.
     */
    public function remove($uploaded) {


    }

    /**
     * Zpracování přejmenování souboru.
     * @param $upload Hodnota navrácená funkcí save.
     * @param $newName Nové jméno souboru.
     * @return mixed Vlastní návratová hodnota.
     */
    public function rename($upload, $newName) {
        Nette\Utils\FileSystem::rename($upload,"../upload_files/".'ey'.$newName);
    }

    /**
     * Uložení nahraného souboru.
     * @param \Nette\Http\FileUpload $file
     * @param array $params Pole vlastních hodnot.
     * @return mixed Vlastní navrátová hodnota.
     */
    public function save(\Nette\Http\FileUpload $file, array $params = []) {
        $file->move("../upload_files/".$file->getSanitizedName());
        return $file->getSanitizedName();
    }

}

Nutno dodat, že soubory se vždy správně do složky nahrají.

EDIT: Zkoušel jsem vypnout svůj model zakomentováním v config.neon, tudíž to používalo BaseUploadModel a výsledek stejný :(

EDIT2: Zkoušel jsem i vypnout ajax jestli to není tím. Bohužel …

Editoval cafesk8 (26. 6. 2018 11:55)

před 11 měsíci

JZechy
Člen | 164
+
0
-

@cafesk8 Ahoj, setRequired() bohužel využít nelze. Nutnost souboru lze kontrolovat na straně serveru při validaci formuláře, zda vrátí nějaké hodnoty.

před 11 měsíci

d3tr1tus
Člen | 52
+
0
-

Ahoj mám docela zvláštní problém. Při nahrávání fotky se mi občas stane, že nahrávaná fotka je otočená o 180 stupňů. Nestává se to vždy, ale jednou za čas to tak prostě je. Už se mě ptal klient jestli bych to mohl opravit, ale já za boha netuším proč se to děje. Mohl by mi někdo prosím poradit? Koukal jsem na nahranou fotku a opravdu byla nahrána obráceně neotočil to až prohlížeč nebo moje CSS. Mám verzi 2.0. Díky za rady :)

před 11 měsíci

JZechy
Člen | 164
+
0
-

@d3tr1tus To je taková sranda, nevšiml jsem si, že by to dělali jiné telefony než samsung… :D Obrázek má v sobě uložená jistá data o orientaci a občas příjde právě otočený jiným směrem, což je zaznamenáno v těch datech.

Tady máš gist jak s tím pracuji https://gist.github.com/…64f21bac0a11, bude tě tam hlavně zajímat ta část okolo switche. Ten to vždycky napraví do správného otočení.

Editoval JZechy (5. 7. 2018 14:16)

před 11 měsíci

d3tr1tus
Člen | 52
+
0
-

@JZechy podívám se na to. Díky moc za radu :)

před 7 měsíci

rumcais1
Člen | 77
+
0
-

Ahoj nevíte jak při vložení a odstranění file odstranit i z inputu formuláře. Dělá to i na demo. Díky

před 7 měsíci

JZechy
Člen | 164
+
0
-

@rumcais1 Co máš přesně na mysli…? Myslíš to, když zmizí ten řádek s tím souborem z tabulky při smazání? To by default dělá sám uploader. Neupravoval sis nějak výpis souborů?

před 7 měsíci

rumcais1
Člen | 77
+
0
-

Ne vemu třeba tvoje demo. Přidám nějaký jpeg zase ho odeberu a dám odeslat formulář. A vypíše mi to Nahrány byly následující obrázky. I když tam už vlastně nic nemám. Díky

před 7 měsíci

JZechy
Člen | 164
+
0
-

@rumcais1 To není žádná extra logika, když odešleš formulář, tak se přenačte stránka, proto to zmizí.

před 7 měsíci

rumcais1
Člen | 77
+
0
-

@JZechy Ne asi to píšu blbě přidám dvě fotky. Jednu smažu a odešlu formulář. A on mi vypíše, že uložil dvě. M.

před 7 měsíci

JZechy
Člen | 164
+
0
-

@rumcais1 To potom není feature, ale bug… To by dělat neměl :D

před 5 měsíci

cafesk8
Člen | 68
+
0
-

Ahoj,

upload souborů mi na PC funguje bez problému, akorát na mobilu, konkrétně Android 7.0 mám problém. Pokud kliknu na upload button, vyjede mi tabulka „Vyberte činnost“, kde je na výběr Fotoaparát | Videokamera | Záznam zvuku | Dokumenty.

Pokud dám fotoaparát, vyfotím fotku a dám „fajfku“, tak se obrázek v pořádku nahraje. Pokud však chci vybrat nějakou fotografii z mobilu, např. dříve pořízené fotografie uložené v galerii, tak si najedu do složky „Galerie“. Kde je vybrat fotografii nebo video, kliknu si na požadovanou fotku, vpravo nahoře dám „fajfku“ u „Vybrat fotografii nebo video“ a v tuto chvíli se mi nenahraje nic a dole mi vyskočí „Předchozí operaci nelze dokončit z důvodu nedostatku paměti“. Žádný AJAX se nezavolá, žádná laděnka nevyskočí.

Nevíte si s tím někdo rady?

před 3 dny

pitr82
Člen | 121
+
0
-

Ahoj @JZechy, plánuješ podporu pro Nette 3.0 ?

Stránky: Prev 1 2 3 4 RSS tématu