AJAX file upload

Discutii legate de AJAX, jQuery, MooTools, Prototype, Dojo, Yahoo! UI Library,script.aculo.us, ExtJS,AngularJS, Backbone.js, Ember.js, KnockoutJS

Moderator: Moderatori

BBstrumf
PHPRomania Supporter
Mesaje: 21
Membru din: Lun Iun 08, 2009 4:27 pm

AJAX file upload

Mesajde BBstrumf » Mar Iul 14, 2009 1:14 am

as vrea sa fac urmatoarea chestie: un file upload in care dupa ce este apasat butonul submit sa fie afisata o imagine care arata ca imaginea este uploadata iar dupa ce imaginea a fost uploadata ...aceasta sa fie afisata intr-un div.

practic vreau sa fac asa:

- dupa ce a fost apasat butonul submit , o functie care apeleaza upload.php sa fie apelata la un anumit interval de timp pana cand raspunsul intors va fi "uploaded" sau ceva de genu.

ceea ce nu stiu este cum sa "vad" cand poza este uploadata, adica functia mea din javascript apeleaza upload.php dar la ce trebuie "sa se uite" ca sa vada daca fisierul a fost uploadat sau nu?



oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mar Iul 14, 2009 1:27 am


Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Mar Iul 14, 2009 1:29 am

http://www.hotscripts.com/listings/search/

selectezi sa caute doar in scripturile ajax si dai sa caute dupa upload si o sa gasesti destule scripturi utile vezi care iti este mai bun...
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

BBstrumf
PHPRomania Supporter
Mesaje: 21
Membru din: Lun Iun 08, 2009 4:27 pm

Mesajde BBstrumf » Mar Iul 14, 2009 1:35 am

hmm....mersi pt raspunsul ultrarapid :D

am sa ma uit chiar acum sa vad care e ideea, sper sa nu fie insa ceva cu pachete PECL(pt ca am vazut acolo ceva de upload progress si e un pachet pecl cu numele asta) pt ca nu am suport de la host.

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mar Iul 14, 2009 11:16 am

BBstrumf scrie:hmm....mersi pt raspunsul ultrarapid :D

am sa ma uit chiar acum sa vad care e ideea, sper sa nu fie insa ceva cu pachete PECL(pt ca am vazut acolo ceva de upload progress si e un pachet pecl cu numele asta) pt ca nu am suport de la host.


In PHP nu poti face progress bar la upload decat daca ai PHP 5.2 sau mai
mare si instalata extensia APC. Alte modalitati de progress bar ar fi pe client,
insa nu e suportat decat in Firefox 3.5, Safari 4 si Chrome 2. S-ar putea sa
mearga si in Firefox 3, dar mi se pare ca da rateuri.
I'm under construction | http://igstan.ro

BBstrumf
PHPRomania Supporter
Mesaje: 21
Membru din: Lun Iun 08, 2009 4:27 pm

Mesajde BBstrumf » Mar Iul 14, 2009 2:51 pm

nu ma intereseaza sa fac un progress bar adevarat(care sa-mi arate cat s-a uploadat si cat mai este de uploadat din fisier) ci un pseudo progress bar, adica sa stiu doar cand fisierul a fost uploadat complet sau nu. Am citit in primul tutorial oferit de oceans ca merge cu temporary files(atata timp cat fisierul temporar inca exista inseamna ca fisierul inca se uploadeaza iar cand fisierul temporar este sters din folderul temporar inseamna ca fisierul a fost uploadat complet). Ceea ce nu am inteles eu inca e succesiunea evenimentelor in uploadarea unui fisier. Din ceea ce am citit pe un forum unii sustin ca tmp_name este creeat cand php-ul inca scrie in fisierul temporar iar altii sustin ca tmp_name este creeat cand fisierul temporar a fost scris complet si asteapta sa se lucreze cu el (sa fie salvat in alt director). Inca nu am incercat cu temporary files pt ca am vrut sa citesc mai mult dar daca varianta a doua este adevarata nu stiu cu ce m-ar ajuta temporary files.

puteti sa imi spuneti si mie din ce stiti ci voi despre aceste doua "teorii"?

Pirahna
Senior Member
Mesaje: 5985
Membru din: Dum Aug 22, 2004 2:04 am
Localitate: la birou
Contact:

Mesajde Pirahna » Mar Iul 14, 2009 4:05 pm

Nu stiu nimic de cele doua teorii ... dar cel mai simplu mod fara a modifica la server ceva este sa folosesti flash, care poate sa iti calculeze viteza cu care ai uploadat si cat ai uploadat din fisier -> iti faci tu procentajele.

Deci cauta flash progress bar upload ...

EDIT: Vad ca nu vrei progress bar adevarat ... pai solutia este pur si simplu html/javascript atunci ... faci un iframe cu upload form, bagi imaginea sau ce ai tu, dai submit, cand dai submit in locul frame-ului e afisata o imagine (gen loading) iar apoi cand e gata submit-ul (si raspunde pagina respectiva) atunci afisezi raspunsul.

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mar Iul 14, 2009 6:59 pm

Amenthes scrie:
BBstrumf scrie:hmm....mersi pt raspunsul ultrarapid :D

am sa ma uit chiar acum sa vad care e ideea, sper sa nu fie insa ceva cu pachete PECL(pt ca am vazut acolo ceva de upload progress si e un pachet pecl cu numele asta) pt ca nu am suport de la host.


In PHP nu poti face progress bar la upload decat daca ai PHP 5.2 sau mai
mare si instalata extensia APC. Alte modalitati de progress bar ar fi pe client,
insa nu e suportat decat in Firefox 3.5, Safari 4 si Chrome 2. S-ar putea sa
mearga si in Firefox 3, dar mi se pare ca da rateuri.


Amenthes, nu cred ca ai vazut link-ul catre un tutorial care nu foloseste APC sau PHP 5.2 si care face progress bar la upload numai ca functioneaza doar pentru un singur fisier la fiecare user care uploadeaza, dar cu cateva imbunatatiri ar rula pentru mai multe si ar fi destul de ok.

@BBstrumf, teoria e in felul urmator, cand cineva selecteaza un fisier ca sa-l trimita catre server, PHP-ul la runtime inregistreaza toti parametrii primiti prin POST , GET , FILES, iar in cazul FILES creaza un fisier tmp(sau mai multe depinde cate fisiere primeste) in care incepe sa stocheze continutul in timp ce-l primeste de la client. Acum pentru ca php-ul creaza fisierul asta la runtime tu nu poti verifica ce nume PHP-ul a atribuit fisierului temporal, si atunci exista 2 metode pentru a trece peste asta, una relativ buna din tutorialul ala cu stocarea fisierelor temporale intr-un fisier si verificarea lor de fiecare data cand alt fisier e uploadat, si alta cu APC care are o utilitate mai functionala pentru ca trimiti un camp si afli numele fisierului temporal direct. La urma PHP-ul ruleaza scriptul si tu te poti folosi de $_FILES[tmp_name] ca sa muti fisierul, pentru ca oricum va fi sters la sfarsitul rularii scriptului.
Daca nu-ti trebuie progress bar, atunci astepti ca scriptul sa se incarce si poti fi sigur ca fisierul s-a uploadat complet, daca nu uploadeaza din cine stie ce cauza(marimea fisierului prea mare,etc) poti construi un error handler sa-ti afiseze erorile formatat.

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mar Iul 14, 2009 7:46 pm

oceans scrie:Amenthes, nu cred ca ai vazut link-ul catre un tutorial care nu foloseste APC sau PHP 5.2 si care face progress bar la upload numai ca functioneaza doar pentru un singur fisier la fiecare user care uploadeaza, dar cu cateva imbunatatiri ar rula pentru mai multe si ar fi destul de ok.


Tu l-ai folosit vreodata? Sincer eu acum l-am incercat, si intr-adevar se
bazeaza pe o idee pe care am avut-o si eu, dar problema e ca nu merge.
Singurul progress bar care imi apare e cel de la browser.

Ma rog, poate ca am testat pe Windows si de asta, dar in acelasi timp, daca
era asa de bun, pun pariu ca il foloseau si altii si aflam si eu despre el.
I'm under construction | http://igstan.ro

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mar Iul 14, 2009 8:07 pm

Nu l-am folosit in productie,il aveam de mult salvat pentru viitor sa-l imbunatatesc sa mearga pentru un user mai multe fisiere dar nu am mai apucat insa ca idee e ok, acum l-am testat tot pe windows si merge, bine un fisier de vreo 10mb.
Daca ceva nu e popular nu inseamna ca e prost, dar nici ca e bun. APC bate pentru ca merge direct la numele fisierului temporal, cu metoda asta trebuie mai multe operatii inutile dar care in final functioneaza.

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mar Iul 14, 2009 10:09 pm

oceans scrie:...acum l-am testat tot pe windows si merge, bine un fisier de vreo 10mb...


Ce inseamna ca ti-a mers? Mie unul nu mi-a aparut nimic. Am uploadat un
fisier de aprox. 300M. La prima incercare a aparut ceva pe la 11M, apoi gata.
Am incercat de vreo 5-6 ori, se blocheaza request-ul Ajax.

A, da, si poate lucrul cel mai important. Cu ce versiune de PHP ai testat? Eu
am avut un 5.2.10.
I'm under construction | http://igstan.ro

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mar Iul 14, 2009 10:47 pm

Pai am facut asa, ca sa reproduc cat mai bine scenariu unui upload de pe internet unde dureaza mai mult, am schimbat iti arat exact cum am in php.ini directorul de upload catre un usb flash drive asta facand citirea mai greoie numai bine sa poti observa uploadul:

Cod: Selectaţi tot

upload_tmp_dir="K:\tmp"


Apoi in whileuploading.php am pus:

Cod: Selectaţi tot

$tmpdir = 'K:/tmp';


Si m-am jucat si cu latency putin si am pus la 10 milisecunde, adica am schimbat in index.php:

Cod: Selectaţi tot

var bUploaded = new BytesUploaded('whileuploading.php', 10);


Si trebuie sa-ti mearga, oricum a fost construit prin 2005 deci ar trebui sa fie compatibil si cu o versiune mai mica de PHP.

//LE: am uitat sa-ti zic, testul l-am facut cu 5.3.0 pe windows

Avatar utilizator
Amenthes
Senior Member
Mesaje: 1370
Membru din: Lun Dec 12, 2005 8:00 am
Contact:

Mesajde Amenthes » Mar Iul 14, 2009 10:58 pm

oceans scrie:am uitat sa-ti zic, testul l-am facut cu 5.3.0 pe windows


Am facut si eu adineauri, tot pe 5.3 cu Windows. Se pare ca merge mai bine,
dar asta sigur e din cauza ca am pus la latenta o valoare mai mica. Si am
mai observat ca trebuie sa resetez sesiunea ca sa mearga si incercarile
ulterioare.
I'm under construction | http://igstan.ro

oceans
Senior Member
Mesaje: 504
Membru din: Mar Noi 13, 2007 3:06 pm

Mesajde oceans » Mar Iul 14, 2009 11:07 pm

Da pai la sesiune acolo e un mic bug, d'aia am zis ca trebuie facut ca un user sa poata uploada mai multe fisiere ca se pastreaza in sesiune, si in plus trebuie adus tot codul la zi.

BBstrumf
PHPRomania Supporter
Mesaje: 21
Membru din: Lun Iun 08, 2009 4:27 pm

Mesajde BBstrumf » Mie Iul 15, 2009 4:21 pm

mersi tuturor pt ce ati discutat aici pt ca am avut si eu de invatat si m-am lamurit cum sta treaba.
pana cand o sa se integreze in core uploadprogress-ul pecl(pt ca asta am auzit ca se va intampla cat de curand, sper :D ) am sa raman la varianta lui Pirahna, pur si simplu cand termina de downloadat fisierul sa scrie un nou nod intr-un fisier xml cu un id pe care il are si campul file din html(asta ca sa pot sa-l folosesc pt mai multe fisiere deodata) si functia din javascript va apela fisierul xml(daca gaseste nodul cu id-ul respectiv inseamna ca fisierul a fost uploadat....daca nu-l gaseste inseamna ca nu s-a uploadat inca).

suna promitator si varianta cu flash si js dar nu am gasit o resursa ok pe net din care sa ma inspir(poate nu am vazut eu) asa ca @Pirahna as fi recunoscator pt un link


Înapoi la “Librarii Javascript”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 16 vizitatori