DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   (X)HTML, JavaScript, DHTML, XML, CSS (http://www.devprotalk.com/forumdisplay.php?f=8)
-   -   Asinhroni upload (http://www.devprotalk.com/showthread.php?t=3285)

Ilija Studen 01. 08. 2007. 08:54

Asinhroni upload
 
Sviđa mi se rešenje da na stranicama sa upload formom na kojima očekuješ da će se čovek zadržati više vremena da upload kreće u pozadini kada korisnik odabere fajl (GMail koristi takvo rešenje u svojoj Reply formi). Dok ti pišeš upload polako štrika i sve super.

Da li je neko radio nešto slično? Tips and tricks?

Mogu da guglam, ali ipak mislim da bi se o ovome valjalo i prodiskutovati malo.

ivanhoe 01. 08. 2007. 09:03

ja koristio iframe za to... prilicno je jednostavno odraditi sam upload, glavni problem je bio kako pratiti koji fajl pripada kome, i koje fajlove pobrisati ako covek odustane, jer se onda stvar dosta iskomplikuje...

ja sam koristio sessione da pamtim uploadovane fajlove, a onda sam namestio preko crona da se periodicno brisu oni kojima je istekao session...fino radi..

noviKorisnik 01. 08. 2007. 09:10

Može li uopšte drugačije? Koliko znam, Ajax je lijen za upload, neće to da radi ... onda ostaju trikovi koji su postojali oduvek :-)

xippi 01. 08. 2007. 10:15

mislim da ne. i google, koliko znam, koristi iframe

Ilija Studen 01. 08. 2007. 10:18

Šta konkretno može da se uradi iframe pristupom? Može da se sluša završetak uploada? Prekine upload koji ide?

skaarj 01. 08. 2007. 10:31

U iframeu je forma kojom radis upload. Sto mozes u obicnoj formi, mozes i tamo.

ivanhoe 01. 08. 2007. 10:35

mozes da handlujes zavrsetak uploada, samo iz ifrejma pozoves neku svoju funkciju na glavnoj strani. Cancel uploada koji je u toku ne znam kako bi odradio, posto se radi o obicnom submitu forme..

noviKorisnik 01. 08. 2007. 11:58

Citat:

Originalno napisao skaarj (Napišite 39638)
U iframeu je forma kojom radis upload. Sto mozes u obicnoj formi, mozes i tamo.

Ne shvatam postavku baš tako (istina, nisam radio u praksi, ali mi deluje jasno kako ide jedina smislena implementacija)...

Iframe je vizalno skriven, cela forma je na stranici. File input ima pridružen handler za onchange, koji okida submit s izmenjenim targetom na iframe (i s akcijom koja možda bolje odgovara). Nakon prijema fajla, iframe dobija generisan sadržaj s povratnom informacijom (taj i taj fajl je uspešno stigao na server) koju predaje glavnoj stranici okidanjem funkcije (ko što već reče ivanhoe). U tom trenutku postaje suvišan file input pa se izbacuje iz formulara. Itd.

skaarj 01. 08. 2007. 13:25

Poenta mog posta je da je u pitanju obican file upload pomocu forme skrivene u Iframe (ovo moze da se odradi na vise nacina ali je to princip). Sve sto mozes da radis kada radis obican upload mozes da radis i ovde. Dakle, nema onreadystatechange jer nije u pitanju XHTTP request, a cini mi se da je na to Ilija mislio kada je postavio pitanje.

ivanhoe 01. 08. 2007. 15:30

Citat:

Originalno napisao noviKorisnik (Napišite 39645)
Iframe je vizalno skriven, cela forma je na stranici. File input ima pridružen handler za onchange, koji okida submit s izmenjenim targetom na iframe (i s akcijom koja možda bolje odgovara). .

ono sto sam ja radio je bila malo drugacija ideja: Na glavnoj stranici, unutar forme je uglavljen iframe tako da izgleda kao deo strane(znaci vidljiv je, ali izgleda kao jedan od boxova u formi). Postoji i link Upload more files koji dinamicki dodaje te ifrejmove, znaci moze da ih bude vise. U svakom ifrejmu se nalazi forma koja u sebi ima samo jedan file input, i na onchange radi submit te forme ka php skripti koja handluje upload. Kad se zavrsi upload skripta vrati mali html koji ima link sa imenom fajla (klik na link omogucava da se fajl pogleda u novom prozoru) i pored njega dugme REMOVE, koje sluzi da se obrise taj fajl, ako se korisnik predomisli.

I to je to, kako korisnik popunjava file inpute, tako se oni submituju, a ti za to vreme mozes da radis druge stvari na osnovnoj stranici. Kad se submituje glavna forma ona pokupi iz sessiona spisak svih uploadovanih fajlova i poveze ih u bazi sa ostalim podacima. Bitno je da glavna forma mora da saceka da se zavrse svi zapoceti uploadi, pa tek onda da se submituje.

marinowski 01. 08. 2007. 17:49

I mi smo tako radili kao ivanhoe, pokazalo se kao efikasno. Primer: http://www.mojauto.co.yu/dodaj.php?rubrika_id=1

srdjevic 01. 08. 2007. 21:35

Kako skontas da li da saljes glavnu formu ako se fajlovi u iframe-u jos podizu? jel onda treba neki onload/onunload na iframe-u koji menja state (varijablu u openeru), pa da mozes da zaustavis submit?

Deluje mi kao da treba imati fin sistem za izvrsavanje akcija koji ce da nize akcije jednu za drugom, tako da kad udaris dugme upload, on doda akciju u niz. Kad kliknes na submit, on ga doda u niz... a druga funkcija trci po nizu i izvrsava redom.... Ili sam ja nesto pobrkao?

ivanhoe 02. 08. 2007. 05:59

Citat:

Originalno napisao srdjevic (Napišite 39673)
Kako skontas da li da saljes glavnu formu ako se fajlovi u iframe-u jos podizu?

ja sam to relativno prosto resio sa jednim nizom u koji zabelezim svaki zapoceti upload, a kad se upload zavrsi, skinem ga iz niza. Submit dugme forme zapravo pokrene jednu funkciju koja periodicno proveri da li su svi uploadi zavrseni, i tek tada uradi form.submit(). Ako nisu zavrseni pozove se setTimeout koji ponovi proveru kroz npr. 200 milisekundi. Naravno dodao sam "Saving data,please wait.." poruku i animirani throbber da bi ljudi imali utisak da se nesto desava nakon klika na submit dugme. :D

Elem, osnovni problem kod ovih asinhronih zajebancija nije kako odraditi sam upload, nego kako pokriti sve moguce kombinacije slucajeva kad se nesto ne odradi kako treba (pukne upload, user canceluje submit ili klikne refresh i slicno). To je ono sto je najveci problem kod asinhronosti sto postoji jako mnogo kombinacija dogadjaja i nikad nisi siguran kojim ce se redom oni desiti, pa je zato php kod za validaciju na kraju daleko glomazniji nego kod klasicnog sinhronog uploada.

Ivan 02. 08. 2007. 10:56

Jel moze neki code example ?

ivanhoe 02. 08. 2007. 18:49

Citat:

Originalno napisao Ivan (Napišite 39698)
Jel moze neki code example ?

koji tacno deo skripte te zanima? Ovo sa proverom da li je zavrsen upload?

Ivan 03. 08. 2007. 16:35

Pa nisam razmiljao o ovom problemu, cisto sam hteo da vidim ovu teoriju o kojoj ste diskutovali u praksi ... mozda nekad nekome zatreba ...

ivanhoe 03. 08. 2007. 17:16

ne smem da objavljujem ceo kod, ubio bi me momak za koga sam radio, ali ako te zanima nesto konkretno, reci slobodno, pa cu da iskopam taj komad koda..

Ivan 03. 08. 2007. 20:01

Ok, kada se budem igrao sa ovim ako negde zapne, cimam te. Hvala

pcmaniac 30. 10. 2007. 16:37

http://swfupload.mammon.se/
upload pomocu javascript-a i flash-a...

conica 07. 12. 2007. 02:34

jedno pitanjce vezano za metodu koju je opisao ivanhoe

kada i u kom momentu se proverava velicina fajla, odnosno kako mogu da onemogucim da cak i pocne file upload za fajlove koji su veci od recimo 10MB, a da ne cekam da se digne do te velicine pa da mi javi gresku

da li ima nacin da sa klijentske strane proverim velicinu kada se fajl odabere?

ivanhoe 07. 12. 2007. 02:59

AFAIK, ogranicavanje velicine u browseru uopste ne funkcionise, niti moze bilo kako pouzdano da se odradi sa javascriptom (mozda pomocu flasha?)

za server-side kontrolu najbolje resenje ti je da setujes upload_max_filesize, jer ce onda php da abortuje upload kad se dosegne limit, pa tako sprecavas floodovanje. Ova vrednost moze iz da se setuje iz .htaccessa tako da imas neku flexibilnost oko podesavanja, mozes da imas vise upload skripti sa razlicitim limitima...

nixa 07. 12. 2007. 03:35

Moze pomocu flash-a , ali je najbolje ipak da se radi sa serverske strane ... file size jednostavno nije mesto da se proverava u client side delu ...

ivanhoe 07. 12. 2007. 03:54

slazem se, ali kapiram i sta conica hoce... Server-side provera je obavezna, ali dodatna client-side provera je skroz sexy i user friendly. Zamisli nekog na modemu ko je utrosio 2 sata uploadujuci sliku od 500KB, a ti mu onda kazes "Pa lepo smo ti napisali da moze najvise 450KB, ajd sad sve iz pocetka"

nixa 07. 12. 2007. 04:08

onda neka proba ovo :)


Vreme je GMT +2. Trenutno vreme je 08:32.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.