Autor Zpráva
piiiiiiiip
Profil
Dobrý den. Na localhostu jsem si udělal v nette upload obrázku. Na localhostu mi to funguje ale když jsem to nahrál na hosting tak to fungovat přestalo.
  foreach ($values['foto'] as $ffoto)
        {
            if ($ffoto->isOk()){
             
                $filename = $ffoto->getSanitizedName();
                $filename = $filename;
                $targetPath = 'http://aaaaaa.cz/temp/imgs';
                $image = Image::fromFile("$targetPath/$filename");
                $logoname = "$filename";
                $image->save('http://aaaaaa.cz/temp/imgs/file_' . $logoname);
                $simage = 'http://aaaaaa.cz/temp/imgs/file_' . $logoname;

            }
V logu mám tohle.
<div id="tracy-bs-error" class="panel">
            <p>Nette\Utils\UnknownImageFileException</p>

            <h1><span>File '/obrazek.jpg' not found.</span>
            <a href="https://www.google.com/search?sourceid=tracy&amp;q=Nette%5CUtils%5CUnknownImageFileException+File++not+found." target="_blank" rel="noreferrer noopener">search►</a>
            </h1>
        </div>

Myslím si že je to špatně nastavenou cestou k úložišti ale nejsem si tím jistý a zkoušel jsem to opravit už přez dvě hodiny bez úspěchu takže to tím být nemusí.
Keeehi
Profil
http://aaaaaa.cz/temp/imgs opravdu správná cesta nebude. Zkusil bych temp/imgs, případně ../temp/imgs nebo něco takového. Záleží, kde ve struktuře je ten tvůj script, ale základem je mít tu cestu relativní.

Řádek 6 a 11 je zbytečný a 9 je taky téměř k ničemu.
piiiiiiiip
Profil
Keeehi:
UploadPresenter mám v app/CoreModule/presenters což znamená že správná cesta by měla tedy být
$image->save('../../../temp/imgs/file_' . $logoname);
nebo
$image->save('/../../../temp/imgs/file_' . $logoname);
že? Jenže to taky nefunguje.
Keeehi
Profil
Ta druhá určitě ne. To lomítko na začátku označuje absolutní cestu od kořene.
Kde aktuálně script je zjistíš pomocí echo getcwd() . "\n";
piiiiiiiip
Profil
Keeehi:
To mi vrátilo tohle:
/var/www/vhosts/aaaaaa.cz/httpsdocs/www
Keeehi
Profil
Takže viděl bych to takto nějak. Vytvářet z toho obrázek, jen proto abys to uložil je zbytečnost. Kdyby jsi ho před uložením chtěl zmenšit, tak ok, ale takto to není potřeba.
    foreach ($values['foto'] as $ffoto) {
        if ($ffoto->isOk()) {
            $ffoto->move('../temp/imgs/file_' . $ffoto->getSanitizedName());
        }
    }
piiiiiiiip
Profil
Původně jsem ho zmenšovat chtěl ale nakonec jsem si to rozmyslel. Toto řešení funguje. Děkuji za pomoc.
piiiiiiiip
Profil
Ještě se chci zeptat zda se dá v nette formulář odeslat automaticky za použití js, něco jako tohle:
        
        xhr.open("post", "upload/upload.php", true);
        
        // Set appropriate headers
        xhr.setRequestHeader("Content-Type", "multipart/form-data");
        xhr.setRequestHeader("X-File-Name", file.name);
        xhr.setRequestHeader("X-File-Size", file.size);
        xhr.setRequestHeader("X-File-Type", file.type);

        // Send the file (doh)
        xhr.send(file);
Keeehi
Profil
piiiiiiiip:
Jedna věc je odeslání formuláře javascriptem a druhá je odeslání na pozadí AJAXem. O co ti tedy jde?
piiiiiiiip
Profil
Vzhledem k tomu že se u tohoto formuláře jedná pouze o upload obzázků mi přijde zbytečné dávat tam ještě tlačítko pro odesílání formuláře a tak bych chtěl aby se ty obrázky uploudovaly automaticky.
Keeehi:
Co bude jednodušší. Ten kod co jsem uvedl výše (našel jsem ho někde na googlu) by měl provést ten upload přez upload.php. Upload.php bude v mé nette aplikaci UploadPresenter.php a takže jestly to chápu správně tak potřebuji aby
  xhr.open("post", "upload/upload.php", true);
Byl signál (nevím jestly je v nette na toto nějaká speciální funkce) který dokáže předat data z formuláře do presentru který je uploaduje.
Keeehi
Profil
Na automatické odeslání formuláře po výběru souboru se dá použít i tento jednoduchý JS
document.getElementById("file").onchange = function() {
    document.getElementById("form").submit();
};

Jinak tlačítko bys tam měl mít v každém případě. To kdyby náhodou javascript nefungoval. Můžeš ho pak ale javascriptem skrýt.

Mám ale takovou otázku, co když se člověk při výběru souboru překlikne a bude chtít svůj výběr změnit? To už nepůjde, jelikož jeho původní výběr okamžitě odesíláš. Já bych to ruční odesílání zase tak úplně nezatracoval.
piiiiiiiip
Profil
Keeehi:
No, jo. To mě nenapadlo xD.
piiiiiiiip
Profil
Keeehi:
Dobře takže tet už dokážu uploadovat soubory pomocí tlačítka. Ještě bych to ale chtěl udělat i pomocí draganddrop. Mám js, který udělá z tagu p tu dropareu ale opět nevím jak to propojit s nette tak aby se soubor nahrál. Na googlu jsem zjistil že se to nejspíš dělá pomocí HTTP request & response ale nevím jak to implementovat.
Keeehi
Profil
Drag & Drop upload obrázků
piiiiiiiip
Profil
Keeehi:
Ano to mám. Nevím ale jak předat data do presenteru který má soubor uložit.
Zechy
Profil
piiiiiiiip:
Pokdu budeme vycházet z toho příkladu, kdy se přes XHR otvírá POST request na nějakou stránku, tak místo "upload.php" můžeš jako parametr dát {link Presenter:Action}.
piiiiiiiip
Profil
Zechy:
Používám toto:
document.getElementById("frm-myForm").submit();
Myslím že problém je v tom že
<p id="drop-area">
není součástí toho formuláře. Potřebuju tedy asi nějak vytvořit políčko ve formuláři které bude ta droparea aby se mi to odeslalo pomocí submit víše.
Zechy
Profil
piiiiiiiip:
Nevím, jaký JavaScript máš, a jak to dělá... Ale při přetažení by měl file input získat referenci na něj. Pak si v klidu formulář odešleš a v datech formuláře máš i nahrávaný soubor.

Případně pokud ti stačí hotové řešení, můžeš vyzkoušet jQuery-FileUpload. Ten už v základu nahrává ajaxem a umí i dropzone.
piiiiiiiip
Profil
Zechy:
Používám tohle:
robertnyman.com/html5/fileapi-upload/fileapi-upload.html
piiiiiiiip
Profil
Zechy:
Pokdu budeme vycházet z toho příkladu, kdy se přes XHR otvírá POST request na nějakou stránku, tak místo "upload.php" můžeš jako parametr dát {link Presenter:Action}.
Myslíš jako signál? Zkoušel jsem tohlé:
xhr.open("post", {plink upload!, document.write(filesupload);}, true);
ale nedostanu do toho tu proměnnou filesupload (název souboru).
Zechy
Profil
piiiiiiiip:
Proč tam taky dáváš document.write? To zapisuje do stránky. A co je v proměnné filesupload?
piiiiiiiip
Profil
Zechy:
Já js vůbec nedělám takže nevím. Do tet jsem ho vůbec nepotřeboval a tak vůbec netuším jak to udělat. Proměná filesupload je (aspon myslím) název souboru nebo nejspíš cesta k němu. Vůbec nevím jestly se snažím předávat správnou věc do toho presenteru, jediné co vím je že nemám ani tušení jak tu drag and drop část zprovoznit.
piiiiiiiip
Profil
Neví tedy někdo jak to udělat správně? Jaký použít nette addon nebo něco?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: