abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 1
    dnes 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 0
    dnes 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    dnes 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 12
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 753 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Upload súborov s progress bar-om

    26.6.2009 13:30 | Přečteno: 4743× | Web | poslední úprava: 26.6.2009 13:29

    Väčšina internetových prehliadačov nevie zobrazovať priebeh odosielania súboru. Pri odosielaní veľkých súborov cez pomalú linku môže táto operácia trvať veľmi dlho pričom užívateľ nemá žiadne informácie o priebehu. Ak Vás zaujíma, ako sa tento problém rieši pomocou PHP, AJAX-u a APC čítajte ďalej.

    Štandardný upload súborov

    Súbory sa štandardne uploadujú cez POST dáta. Všetko čo na upload budeme potrebovať je HTML stránka s formulárom na strane klienta a PHP skript spracujúci súbor na strane serveru. Po odoslaní súboru sa stránka správa rovnako ako pri veľkom oneskorení spojenia so serverom. Užívateľa „informuje“ o priebehu operácie prehliadač, ktorý má informácie o množstve odoslaných dát a celkovej veľkosti. A to je hlavný problém – takmer žiaden prehliadač (myslím, že to zobrazuje len Opera) nezobrazuje priebeh.

    Klientská časť

    Na strane klienta si vystačíme s jednoduchým formulárom. Kódovanie dát formulára (enctype) je dobré prispôsobiť pre odosielanie binárnych súborov. Pole pre odoslanie súboru je štandardný input s typom file. Podobne ako u ostatných polí, aj tu je identifikátorom poľa atribút name. Nasledujúci formulár odošle súbor identifikovaný kľúčom „mojSubor“. Skript starajúci sa o spracovanie odoslaného súboru je upload.php.

    <form method="post"
          action="upload.php"
          enctype="multipart/form-data">
      <fieldset>
        <legend>Upload</legend>
        <div>
          <input type="file" name="mojSubor" />
          <input type="submit" value="Upload" id="submit" />
        </div>
      </fieldset>
    </form>
    

    Serverová časť

    Kód, ktorý spracuje prijatý súbor sa spustí až po odoslaní dát. Zatiaľ sa súbor uploaduje do dočasného adresára. Programátor musí napísať jedine kód pre presun súboru z dočasného adresára do cieľového adresára. Nasledujúci program demonštruje jednoduchosť serverovej časti. Skript najskôr testuje, či bol súbor vôbec odoslaný, ďalej prebehne kontrola úspešnosti prenosu súboru a nakoniec presunie súbor do požadovaného adresára (v tomto prípade adresár, v ktorom tento skript).

    <?php
    $key = 'mojSubor';
    if (!isset($_FILES[$key]) ||
        $_FILES[$key]['error'] != UPLOAD_ERR_OK ||
        !move_uploaded_file($FILES[$key]['tmp_name'],
                            dirname(__FILE__).'/'.$FILES[$key]['name']))
    {
      echo('Chyba!');
    }
    else
    {
      echo('OK');
    }
    

    ✓ Výhody

    ✗ Nevýhody

    Riešenie pomocou AJAX-u

    Teraz si predstavte, že ste v úlohe človeka, ktorý píše web s uploadom veľkých súborov (povedzme videá). Zistíte, že veľa užívateľov zruší spojenie. Skúmaním dôjdete k záveru – používatelia nie sú informovaní o prenose súboru a preto ho zrušia pred dokončením. V podstate máte dve možnosti: tlačiť vývojárov prehliadačov, aby implementovali upload progress bar, alebo si ho implementujete sami. Žiaľ toto je pri vývoji webu veľmi častý prípad, veď načo upraviť zopár prehliadačov, namiesto toho radšej upravme všetky weby.

    Ak Vás teda predchádzajúci odstavec neodradil čítajte pokojne ďalej. Úlohou tohto blogu nie je naučiť Vás urobiť upload so zobrazením priebehu, ale ukázať aké sú tieto riešenia zlé.

    Princíp

    Všetky riešenia využívajú vlastnosti rfc1867. Väčšina prehliadačov pri odosielaní súboru odošle aj celkovú veľkosť dát. Prehliadač u klienta periodicky zisťuje množstvo prenesených dát na serveri a celkovú veľkosť. Podľa týchto dát zobrazuje priebeh operácie.

    Podpora

    Klient bude potrebovať internetový prehliadač s podporou AJAX-u. Pre komunikáciu som zvolil XML. Podporu týchto technológii nájdeme vo väčšine prehliadačov.

    Server musí klientovi vedieť poskytnúť informácie o prenose. To sa dá realizovať niekoľkými spôsobmi (patch PHP, APC …). Ja som zvolil pre ukážku realizácie APC. Aby rozšírenie APC mohlo poskytnúť informácie o prenose musí byť povolená podpora rfc1867 (premenná apc.rfc1867="1" v konfiguračnom súbore).

    Klientská časť

    Formuláru na odosielanie súborov pribudne jedno pole s identifikátorom súboru navyše. Ako identifikátor súboru môžeme použiť pseudonáhodné číslo (podstatné je aby nedochádzalo ku kolíziám). Názov poľa musí byť rovnaký ako hodnota apc.rfc1867_name.

    <input type="hidden" name="<?= ini_get('apc.rfc1867_name'); ?>" value="<?= rand(); ?>" />
    

    Serverová časť

    O presun súboru sa bude podobne, ako v predchádzajúcom prípade starať skript upload.php. Nie je potrebné urobiť v ňom žiadne dodatočné zmeny. Pribudne tu ale skript pre zisťovanie stavu prenosu (status.php).

    Stav sa zisťuje preriodickými dotazmi klienta. V dotaze musí byť identifikátor súboru (v našom prípade vygenerované náhodné číslo). Identifikátor je možné odoslať vo forme GET, alebo POST dát.

    if (!isset($_POST['fid']))
    {
      die();
    }
    
    $fid = $_POST['fid'];
    
    $status = apc_fetch(ini_get('apc.rfc1867_prefix') . $fid);
    if (!is_array($status))
    {
      die();
    }
    
    header('Content-type: text/xml');
    echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n".
         "<status>".
           "<done>$status[done]</done>".
           "<total>$status[total]</total>".
           "<complete>$status[current]</complete>".
         "</status>";
    

    Identifikátor súboru posielam z javascriptu v poli fid(fileId). Volaním apc_fetch sa dajú získať informácie o stave prenosu súboru. V prípade úspešného načítania stavu sa vygeneruje XML.

    Javascript

    Najväčšia časť kódu sa vykonáva u klienta. Pri písaní webových aplikácií využívajúcich javascript kladiem dôraz na to, aby fungovali aj u prehliadačov bez podpory / s vypnutým javascriptom.

    Samotný HTML kód nie je vďaka javascriptu potrebné modifikovať. Obsluhu udalostí (atribúty on* u HTML značiek) je možné pridať aj dynamicky javascriptom.

    function addEvent(object, event, func)
    {
      if(window.addEventListener)
      {
        object.addEventListener(event, func, false);
      }
      else
      {
        object.attachEvent('on'+event, func);
      }
    }
    
    var onLoad = function(e)
    {
    …
    }
    
    addEvent(document.body, 'load', onLoad);
    

    Tento príklad pridá obsluhu udalosti load celého dokumentu (body). Obslužnou rutinou je funkcia onLoad.

    Niektorých čitateľov by mohla zlákať udalosť formulára submit. Kód využívajúci udalosť submit nie je spoľahlivý pri odosielaní súborov. Niektoré internetové prehliadače majú z bezpečnostných dôvodov zakázané použitie udalosti submit pri uploade. Riešením je odchytenie udalosti click na tlačítkach s typom submit. Táto udalosť sa generuje aj pri odoslaní formulára bez kliknutia na odosielacie tlačítko.

    var forms = document.getElementsByTagName('form');
    for (var i = 0; i < forms.length; ++i)
    {
      var inputs = forms[i].getElementsByTagName('input');
      for (var j = 0; j < inputs.length; ++j)
      {
        if (inputs[j].type == 'submit')
        {
          addEvent(inputs[j], 'click', function(e) {…});
        }
      }
    }
    

    Ďalším obmedzením, s ktorým sa stretneme je nemožnosť komunikácie so serverom počas načítavania stránky. Jediným rozumným spôsobom ako to obísť je vytvorenie rámca (iframe), v ktorom sa bude načítavať stránka, na ktorú odosielame súbor. Formulár má atribút target, ktorý určuje ID rámca / okna, v ktorom sa načíta stránka.

    ✓ Výhody

    ✗ Nevýhody

    Na mojom webe som umiestnil kompletný popisovaný príklad.

    Upload súboru v prehliadači

    Upload súboru v Konquerore


    Upload súboru v Opere

    Upload súboru v Opere. Všimnite si zobrazovanie priebehu v statusbare. Chýba tu však informácia o celkovej veľkosti prenášaných dát.


    Priebeh načítavania dát pri odosielaní súboru

    Na tomto obrázku je priebeh načítavania dát o stave odosielania súboru. Záznam bol robený pri znížení rýchlosti prenosu užívateľa apache pomocou QoS. Pri pomalých linkách môže byť interval aktualizácie veľmi veľký (prípadne po prekročení timeoutu môže aktualizácia stavu úplne prestať fungovať).

    Záver

    Týmto blogom som chcel poukázať na spôsob riešenia problémov pri vývoji webu. Ako konkrétny príklad som použil progress bar pri uploade súborov. Prakticky všetky tieto progress bar-y fungujú na rovnakom princípe, ako som popisoval.

    Tento problém sa dá riešiť výrazne rýchlejšie s použitím javascript-ových toolkit-ov. Ja patrím medzi používateľov, ktorí neveria obrovskému množstvu „nepriestrelného“ kódu v javascripte. Preto sa radšej vyriešim problém vlastnými silami. Ak poznáte implementáciu môžete objektívne posúdiť jej nasadenie / nenasadenie v praxi.

    Situácia okolo uploadu je zlá z niekoľkých dôvodov:

    Ak na tom chcete niečo zmeniť hlasujte za upload progress bar. Používateľom prehliadača Konqueror dávam do pozornosti bug #11037. Zaujímavé riešenie je na tomto videu.

           

    Hodnocení: 100 %

            špatnédobré        

    Obrázky

    Upload súborov s progress bar-om, obrázek 1 Upload súborov s progress bar-om, obrázek 2 Upload súborov s progress bar-om, obrázek 3

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    26.6.2009 13:46 9002
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Mna trapi upload viacerych suborov naraz...

    mirec avatar 26.6.2009 13:55 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    To nie je problém pokiaľ nejde o adresár. Pridať nové políčko do formulára pomocou javascriptu povedzme po kliknutí na uploadnúť viacej súborov nie je problém. Žiaľ celý adresár je možné uploadovať len v zabalenej forme.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    26.6.2009 16:20 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    IMHO myslel dialog ktery umoznuje vyber vic souboru. Kdyz chci nahodit 30 fotek, tak otevirat jeden soubor za druhym je humus.
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    mirec avatar 26.6.2009 16:43 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    No dá sa to riešiť tak, že sa všetko pošle zabalené (povedzme ako zip) a server si to rozbalí. Síce stále to nie je moc pohodlné pretože užívateľ musí ručne baliť, ale je to rýchlejšie než po jednom súbore vyberať. A podpora archívov už nie je tak zriedkavá u serverov s fotkami.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    default avatar 26.6.2009 17:09 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    V Safari tohle nějak funguje. Když si nahrávám fotky do MobileMe Gallery, tak si můžu v tom dialogu naráz vybrat víc souborů. Ale jak to funguje — to se mě neptejte. :-D A pak je tam nějaká (asi AJAXová) záležitost, která to pod tlakem protlačí na server. I s progressbarem.

    26.6.2009 18:02 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Flash
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    default avatar 26.6.2009 18:48 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Asi jo. Ale ten dialog na výběr souboru — ten asi ve Flashi nebude. Je to totiž standardní dialog pro výběr souboru. Ale asi tam bude nějaký hack, jak mu dovolit vybrat víc souborů. :-D

    26.6.2009 19:03 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Flash muze otevrit dialog pro vyber vice souboru, jelikoz to je normalni program, ktery bezi v systemu.
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    26.6.2009 19:08 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Ještě jsem něco takového viděl v javě... ale tam by ten filedialog vypadal tak nějak... javovsky :P.
    Baník pyčo!
    default avatar 26.6.2009 19:14 default | skóre: 22 | Madrid
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Je to Flash. Otevřel jsem to ve Firefoxu a tam to dohledal.

    27.6.2009 00:02 Hansik
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Jmenuje se to JUpload (http://jupload.sourceforge.net/). Da se to celkem lehce pouzivat (jsou tam dema). Je to pod GPL. Exituje i nejaka vic "vymakana" ale komercni verze http://www.jupload.biz/
    26.6.2009 20:07 VRtulnikk | skóre: 17 | blog: blogisek | Rokycany
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    JJ, také používám řešení založené na Flexu... myslím, že to je menší zlo, než přidávat soubory po jednom.
    26.6.2009 21:39 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Co takhle mít možnost posílat soubory e-mailem? :-) Perfektní třeba pro mobilní zařízení, kde s Flashem ani Javou moc parády nenaděláte...
    26.6.2009 21:43 VRtulnikk | skóre: 17 | blog: blogisek | Rokycany
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Používám to pouze v backendu aplikací, kam se připojuje úzká množina lidí a rozhodně ne z mobilních zařízení :). Na frontendu jsem ještě takovouto potřebu neměl, nicméně mailem by to urřčitě řešit slo také ;)
    26.6.2009 16:43 pozortucnak | skóre: 21 | blog: vecny_windowsar
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    No možná by to nemusel být tak velký problém...

    Firefox i opera jsou schopni zobrazit obsah složky jako html stránku, v exploreru by to také určitě nějak šlo, jenom co se týče konqueroru, mě nic nenapadá...
    Jsem mimořádně obtížný případ
    26.6.2009 16:56 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Ty (jako tvůrce webu) na ten obsah složky ale nesmíš moct sahat, jinak by to bylo bezpečnostní riziko.
    26.6.2009 17:59 pozortucnak | skóre: 21 | blog: vecny_windowsar
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Nejde o to na obsah složky sahat, ale o to zjistit co v té složce je...
    Jsem mimořádně obtížný případ
    mirec avatar 26.6.2009 18:05 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Aj výpis adresára je citlivá informácia. Ak by input mal atribút multiple, kde by užívateľ vybral zoznam súborov bolo by to o inom.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    26.6.2009 14:31 l4m4
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Užívateľom je to jedno.

    Jetliže je to všem jedno, tak situace není zlá, naopak je vše v pohodě.
    mirec avatar 26.6.2009 15:01 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Problém: užívatelia ani netušia čo všetko sa deje preto, aby sa im zobrazil progressbar. Proste tlačia len na tých, ktorí robia weby. To, že by to mal vedieť samotný prehliadač ich nezaujíma (proste typické lamy).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    26.6.2009 15:13 CEST
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Obcas se mi stava, ze se nejaka stranka nacitava a zobrazuje postupne, jak prichazeji data. Netusim, jestli to tak funguje normalne nebo je to nejaka extended-feature HTTP nebo ceho, ale nedalo by se to pripadne taky pouzit spis nez AJAX?

    Napr. neco jako
    <html><body>
    <?php
    
    for ($i=0;$i<10;$i++) {
      echo "Progress $i<br/>\n";
      flush();
      sleep(1);
    }
    
    ?>
    </body></html>
    
    Ale nevim, jestli Apache dava rizeni PHP uz behem posilani nebo az po dokonceni posilani souboru.
    mirec avatar 26.6.2009 15:28 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Skript sa spustí až po uploadnutí všetkých dát. A to, že sa stránka zobrazuje postupne je úplne normálne (HTML kód sa dá zobrazovať už počas jeho načítavania).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    26.6.2009 15:29 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Pokud Apache (ani žádná proxy po cestě) není nastavené na bufferování výstupu, pak je normální, že po flush() se všechno, co je už k dispozici, odešle uživateli. Ale PHP kód dostane řízení až po přijmutí celého požadavku.
    26.6.2009 15:38 Kvakor
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Ano, s uploadem přes HTTP jsou problémy. Mimo problému s uploadem je tu ještě výše zmínený problém s posíláním více souborů naráz (popř. celého adresáře) a problém s velikostí souboru.

    Problém více souborů naráz jse vyřešit relativně jednoduše dynamickým přidáním dalších vstupů typu file, ale z uživatelského hlediska je to dost nepraktické. Upload většího souboru, než je minimum z nastavení maximálního uploadu ve fomuláři, nastavení serveru (v PHP upload_max_filesize a post_max_size) a nastavení všech proxy po cestě (což může být i tak málo, jako 256KB), je horší problém, který se bohužel klasickými metodamy obejít nedá.

    Pokud jsou naším cílem "obyčejní uživatelé" (tj. lamy), potom zbývají dvě možná řešení: upload přes Flash/Java applet a upload přes FTP.

    S první variantou moc zkušeností nemám - Java applety potřebují být podepsané, aby mohly sahat na souborový systém, a u Flashe to také není nic jednoduchého (jeden flashista mi to kdysi vysvětloval, ale nějak mi to vypadlo z hlavy).

    Naprotomu druhou variantu jsem už úspěšne použil, není moc složitá, ale vyžaduje podporu FTP serveru - ten musí být schopen dynamicky vytvářet uživatelské účty a být schopen se nějak domluvit s webserverem. Já použil ProFTPd a chrootované virualní uživatele s účty v MySQL tabulkce. Když někdo potřebuje nahrát velký soubor, je pro něj vytvořen dočasný FTP účet (ze kterého nemůže ven, a může tam je nahrávat soubory, nic víc), který je po dokončení uploadu zrušen.

    Uživately je poskytrnuto uživatelské jméno a heslo (oboje generované), navíc má ve stránce odkaz ftp://uzivatel:heslo@ftp.domena.cz, kterým se muže přímo dostat na FTP. Díky tomu mohou "obyčejní uživatelé" použít drag'n'drop a vesele si přetahají požadované soubory do cílového okna, ti zkušení mohou použít svého oblíbeného FTP klienta, nebo si FTP účet pripojit jako součást souborového systému. Po ukončení přenosu si uživatel zatrhne ve výpisu souborů ty, které opravdu chce naimportovat, zbytek je spolu s uživatelským účtem smazán (to se stane automaticky i po určitém časovém intervalu).

    Tato metoda je sice takový neelegantní kočkopes (napůl HTTP, napůl FTP), ale má několik výhod:
    1. Není omezená velikost ani počet souborů, teoreticky jdou přenášet i celé adresáře
    2. FTP klienti mají progressbary, dokonce i tupý Průzkumník ve Windows (tem má sice jen "létající papírky", ale alespoň něco)
    3. Pokročilí uživatelé mohou použít svéjo oblíbeného FTP klienta, není jim nucen prohlížeč
    4. Skoro všechno se dělá na straně serveru, není třeba složitější prohlížeč než třeba textový Lynx, všechno je čisté HTML
    Nevýhody:
    1. Je třeba ovládat FTP účty, takže to není použitelné na běžných komečnich hostinzích. Je to spíše řešení pro serverhosting nebo vlastní server. FTP démon musí být navíc dobře nakonfigurovaný - chroot je nutnost, měly by být nastavené kvóty, vhodné je také omezit použitelné FTP příkazy (např. nemožnost nahrané soubory stáhnou zpět nebo smazat, nemožnost vytvářet adresáře ...).
    2. FTP není bezpečné, natož posílání hesel k němu přes HTTP protokol. I když jsou uživatelské účty generované a dočasné, je možné je teoreticky zneužít. Řešením je HTTPS a FTPS, ale jen tehdy, když je jisté, že bude ze strany klienta podporováno. V opačném případě lze ještě použít šifrování samotných souborů a jejich automatické dešifrování po nahrátí.
    3. Pro uživatele je to poněkud nezvyklé, ale většina to pochopila bez větších problémů (nikdo nám nenahrával zástupce :-) ).
    4. Většina prohlížečů umi z FTP jen číst, ale nebývá problém nastavit je na používaní jiného FTP klienta (MS IE třeba defaultné používá Průzkumníka).
    26.6.2009 19:12 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Zajímavé řešení.
    Baník pyčo!
    26.6.2009 20:52 Abraxis
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Pro upload adresaru apod. pouzivam k naproste spokojenosti v kombinaci s PHPkem toto:

    http://jupload.sourceforge.net/

     

    mirec avatar 27.6.2009 06:53 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Ach java, nie práve najlepšie riešenie. To fakt radšej povoliť upload archívov.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    26.6.2009 21:21 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Zajímavé řešení. Jak je to s podporou FTP uploadu v různých prohlížečích? Když se k tomu dostane uživatel Opery, Firefoxu, Konqueroru, zvládne tam ty soubory intuitivně nahrát? Mne osobně by třeba použití drag-and-drop asi nenapadlo, a kdyby ano, přemýšlel bych, odkud ty soubory v Linuxu vůbec můžu tahat – z příkazové řádky asi těžko :-) Mají ty prohlížeče nějakou jinou podporu, třeba přes pravé tlačítko akci „nahrát soubory“, kde by se objevil standardní otevírací dialog? Předpokládám, že jste to zkoušel…
    28.6.2009 13:37 Kvakor
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Prohlížeče mimo MS IE FTP podproují, ale většinou jen read-only, což v mojem případě nevadilo, protože hlavní byla podpora "obyčejných uživatelů" s MS IE (kde se FTP dělá přes Průzkumníka). V ostaních prohlížečích to jde také nastavit na externího FTP klienta (testoval jsem např. Firefox&Filedzilla), ale protože je na stránce mimo odkazu i server/login/heslo, pokročilejší uživatelé nejspíš použijí oblíbeného FTP klienta (já bych také nikdy negrag'n'dropoval). Na to pak opravdu stačí i příkazová řádka a Lynx (osobně jsem to testoval), jediná výhoda grafického přostředí (včetně xterminálů) je možnost Copy&Paste loginů a hesel.
    mirec avatar 27.6.2009 06:54 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om
    Znie trochu ako delo na komára ... ale pri troche snahy a pri integrácii do apacha by to mohol byť zaujímavý projekt.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    27.6.2009 13:36 Senior Database Programmer
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Pohodlne sa to da riesit java appletom alebo flashom. Kto nema rad javu a flash nech si uploaduje subory po jednom, lebo ine riesenie momentalne nieje...

     

     

    28.6.2009 11:52 cuba.g | skóre: 8
    Rozbalit Rozbalit vše Re: Upload súborov s progress bar-om

    Ještě pro upload více souborů lze použít SwfUpload. Celkem dobře se s tím pracuje, ale je nutný flash. Viz. swfupload.org/

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.