HTML 5 File Upload / Drag & Drop (multiple) + progress


Na internete je plno návodov, no žiadny ktorý by mi vyhovoval na jeden projekt. Preto som navštívil Google, dal svoje požiadavky dokopy a vznikol jednoduchý kód na upload súborov. Drag & Drop súborov podporuje zatiaľ len Firefox, Google Chrome a Safari.

 


Výber elementu

Cez jQuery element, ktorý bude načúvať na drag & drop. V prípade, že nechcem použiť jQuery atačneme cez attachEvent udalosti popísané v jQuery (dragenter dragover dragexit drop).
$(".element").live("dragenter dragover dragexit drop", function (e) {
    switch (e.type) {
        case "dragenter":
            dragEnter(e);
            break;
        case "dragover":
            dragOver(e);
            break;
        case "dragexit":
            dragExit(e);
            break;
        case "drop":
            drop(e);
            break;
    }
});

Spracovanie udalostí a upload súborov

function dragEnter(evt) {
    evt.stopPropagation();
    evt.preventDefault();
}

function dragExit(evt) {
    evt.stopPropagation();
    evt.preventDefault();
}

function dragOver(evt) {
    evt.stopPropagation();
    evt.preventDefault();
}

function drop(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var fd = new FormData();
    fd.append("key", "value");

    for (var i = 0; i < files.length; i++)
        fd.append("file", files[i]);

    var xhr = new XMLHttpRequest();
    xhr.upload.addEventListener("progress", function (evt) {
        var percentage = Math.round(evt.loaded * 100 / evt.total); 
        var speed = evt.transferSpeed;
        var time = evt.timeRemaining;
    }, false);
 
    // xhr.addEventListener("load", function () {  }, false);
    // xhr.addEventListener("error", function () {  }, false);
    // xhr.addEventListener("abort", function () {  }, false);
  
    xhr.open("POST", "http://mypage.com/upload/");
    xhr.send(fd);
}
    

 
Peter Širka
pred 5 mesiacmi, 14.01.2012

Diskusia (0)


Nevyplnil si všetky povinné políčka alebo si ich vyplnil chybne. Neojebávaj môj systém.
Skontroluj či si zadal meno a komentár.
Tvoj komentár bol úspešne odoslaný.
Ďakujem.

Meno:

Komentár:

Ďalšie blogy
Dynamické vytvorenie subdomény v ASP.NET / MVC
Dynamické vytvorenie subdomény v ASP.NET / MVC
Bolo to už dávno, čo nás na firme žralo, že naša konkurencia vedela riešiť dynamicky vytvárenie subdomén alebo domén 3 úrovne. Google ich lepšie indexoval (tak sa nám to zdalo) a riešenie prišlo až v IIS 7.
Prečítať 9
ASP.MVC - Session troška inak a prihlásený užívateľ
ASP.MVC - Session troška inak a prihlásený užívateľ
V dávnej minulosti som používal vstavaného Session providera. Raz mi praskli nervy a rozhodol som sa experimentovať. Stálo to za to. Ten kto neexperimentuje ten nemá a ja experimentujem len pre moje potreby.
Prečítať 21
C# (2) funkcie na ktoré som skutočne pyšný
C# (2) funkcie na ktoré som skutočne pyšný
Každý kóder určite vymyslel nejaký kód, na ktorý je pyšný. Ja som pyšný na 2 funkcie, ktoré používam v našich projektoch denno-denne. Niekomu sa budú zdať smiešne, no pre mňa sú jedinečné.
Prečítať 14
ASP.MVC, ASP.NET Facebook like count
ASP.MVC, ASP.NET Facebook like count
Jednoduchý kód na zistenie počtu like-kov z Facebooku na zadanú URL adresu. Je možné získať ešte ďalšie zaujímavé počty, napríklad počet zdielaní, počet komentárov, atď..
Prečítať
jQuery webcam plugin / ASP.NET, ASP.MVC
jQuery webcam plugin / ASP.NET, ASP.MVC
Pre náš webový projekt som použil jQuery webcam plugin, ktorý spustí Flash animáciu a odfotí užívateľa. Následne spracovaný obrázok odošle na server. Problém je, že odosiela data po pixeli.
Prečítať