Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Uploadify - upload tylko pierwszego pliku z kolejki i zonk
Forum PHP.pl > Forum > Po stronie przeglądarki
erix
Ta, nadszedł kolejny moment, w którym moja mózgownica już kapituluje i nie znajduje kolejnych pomysłów, więc piszę wątek. A jak do tej pory, zadawałem za trudne pytania, na które nie doczekałem się odpowiedzi, ale a nuż... winksmiley.jpg

Przechodząc do meritum:
  • korzystam z Uploadify (http://uploadify.com) 2.x
  • dostosowuję multi-upload do nowej wersji (bo przykłady są dla 1.5), wszystko działa
  • jednak po dopięciu do mojej mini-aplikacji coś jest nie tak


Jeśli zajawka jest ciekawa, więcej opisu:
mianowicie, w Uploadify, jest trochę dziwnych rzeczy, powiedziałbym że namieszane, ale szczegół, nie o tym temat.

Odpaliłem sobie na poligonie coś takiego:
[JAVASCRIPT] pobierz, plaintext
  1. $("#fileUpload2").uploadify({
  2. 'uploader': 'js/uploadify.swf',
  3. 'script': 'upload.php',
  4. 'folder': 'files',
  5. 'multi': true,
  6. 'buttonText': 'Select Files',
  7. 'displayData': 'speed',
  8. 'simUploadLimit': 1,
  9. onSelect: function(event, ID, file){
  10. var zuo = $('#zuo')
  11. .append('<li>'+file.size+' '+ID+'</li>')
  12. .find('li')
  13. .last()
  14. .data('size', file.size)
  15. .data('ID', ID)
  16. .append('<a href="">wyp</a>')
  17. .find('a')
  18. .last()
  19. .click(function(e){
  20. e.preventDefault();
  21. $('#fileUpload2').uploadifyCancel($(this).parent().data('ID'));
  22. $(this).parent().remove();
  23. });
  24. return false;
  25. },
  26. onComplete: function(a,b,c,d){
  27. alert('ZUOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO!');
  28. return false;
  29. }
  30. });
[JAVASCRIPT] pobierz, plaintext


I ten kod działa bez problemów:
  • własna obsługa kolejki śmiga
  • wywalanie z niej obiektów również
  • powiadomienie o uploadzie każdego z obiektów nie sprawia problemów - skrypt docelowy jest wywoływany i za każdym razem otrzymuję odpowiedniego alerta


Jednakże w kontekście mojej aplikacji dzieje się coś dziwnego: uploadowany jest tylko pierwszy plik z kolejki, zdarzenie onComplete nie jest wyzwalane, a podejrzenie zwracanego wyniku z onProgress pokazuje, że upload nastąpił w 100%.

Postanowiłem przekopać google, znalazłem jeden wątek na StackOverflow, ale niczego ciekawego się nie dowiedziałem.

Nie liczę, którą godzinę już nad tym siedzę, ale przyznam, że daje mi to trochę popalić.

Co jeszcze z przydatnych informacji - testowane pod najnowszym Fx-em i jednym z ostatnich buildów Chromium. W obu zachowuje się tak samo.

Na domiar złego, jeśli nie obsłużę w swojej aplikacji zdarzeń dla onComplete i onProgress, gdy polegam na standardowych funkcjach obsługi, sytuacja jest identyczna.

Początkowo myślałem, że jest to spowodowane tym, iż chowałem warstwę z uploaderem (display: none i Flash Player mrozi animację) - to też jednak sprawdziłem i pudło. Nadal jest to samo.

Aplikacja nie jest szczególnie skomplikowana - to coś w stylu kreatora i kolejki. Raczej niczego w środku szczególnego nie ma, co mogłoby coś takiego powodować; sprawdziłem już chyba wszystko.

Jakieś pomysły? scriptAccess chyba nie powinien mieć na to wpływu; żądania są w obrębie jednego hosta, zresztą - surowy przykład działa...
bikerszymek
Zacznę od przyznania, że faktycznie Uploadify jest dziwne, mieliśmy z nim nie jeden problem, również bliźniaczo podobny do Twojego. Aplikacja stojąca na symfony, w wersji dev uploadowała pliki bez problemu (wykluczając bardzo dziwny sposób samego zapisu i dostępu do obiektu file), natomiast po przełączeniu się na tryb produkcyjny uploadował się jedynie pierwszy plik, po kilku godzinach postanowiłem usunąć z kontrolera sfView::NONE i jakimś cudem zadziałało. Nie mam jak odnieść tego do Twojego przypadku ale mam nadzieje, że w jakiś sposób okaże się to pomocne.
erix
Tu nie ma żadnego frameworka jeśli chodzi o back-end, więc niestety, za wiele nie pomoże...

Podejrzewam, że któraś z funkcji/metod/bibliotek może się gryźć, ale sprawdziłem chyba wszystkie kombinacje (przed chwilą próbowałem wywalić jquery.fx.color, ale nic to nie dało...), doctype na Strict.

Może jeszcze uda mi się wydumać, jak hooki do debugowania w ActionScripcie dorzucić...

Cytat
Nie mam jak odnieść tego do Twojego przypadku ale mam nadzieje, że w jakiś sposób okaże się to pomocne.

A nie pamiętasz może, jakie były różnice w wyplutym kodzie, jakieś szczególne elementy w DOM, etc?
bikerszymek
Cytat(erix @ 21.07.2010, 22:56:32 ) *
A nie pamiętasz może, jakie były różnice w wyplutym kodzie, jakieś szczególne elementy w DOM, etc?


Niestety nie.
wookieb
Temat dotyczy głównie JS
http://forum.php.pl/index.php?showtopic=15...mp;#entry765763
erix
No tak, ale celowo nie podałem kodu ze względu na to, że problem jest - tak naprawdę - od niego niezależny (co testowałem kilkukrotnie).

Cytat
Temat dotyczy głównie JS

Teoretycznie - jak pisałem, znalazłem w Sieci podobny problem, również podany kod JS, ale w nim nie było praktycznie nic. Robiłem też u siebie różnicówkę, w postaci wywalenia całego JS-a i ręcznego odpalenia uploadera (łącznie ze zmianą doctype).

Jednak w środku nocy, w jakiś niezrozumiały dla mnie sposób - zaczęło działać. Szczerze mówiąc, do tej pory nie mogę za bardzo zrozumieć, w jaki to magiczny sposób się stało.

Z tego, co pamiętam, to zrobiłem rzecz następująco: przy konfigurowaniu instancji Uploadify, nie ustawiałem własności onComplete i onProgress. Zgodnie z dokumentacją, te zdarzenia są wyzwalane przez animację odpowiednio po wysłaniu pliku i zmianie postępu operacji.

No i - z tego co mi jedynie przychodzi do głowy - wniosek nasuwa się jeden i nie jest on do końca powiązany z JS. Mianowicie, ustawienie powyższych własności blokuje jakiekolwiek późniejsze przeciążanie. Czyli gdy ktoś próbuje co plik zmienić handler do którejś z operacji przez uploadifySettings i ponowne ustawienie jak w konstruktorze - kaszana.

Ustawienie tychże zdarzeń przy wykorzystaniu unbindowania i ponownego bindowania wewnętrznych skryptu - uploadifyComplete i uploadifyProgress odblokowało ustrojstwo... I podejrzewam, że jest to jakiś wewnętrzny problem flasha, bo raz ustawionego zdarzenia wywoływanego przez External.call nie można po prostu przeciążyć... I to jest ból, na który zmarnowałem 2 dni.

Jest jeszcze jedna ciekawa sprawa - metodę do uploadu wywoływałem z jednej podfunkcji anonimowej, struktura przedstawiała się mniej-więcej tak:
[JAVASCRIPT] pobierz, plaintext
  1. var flashUpload = function(ID, pointer, file){
  2. $('#handle').unbind(...).bind(...).uploadifyUpload(ID);
  3.  
  4. }
  5.  
  6. var beginUpload = function(){
  7. //...
  8.  
  9. flashUpload($(this).data('ID'), pointer, $(this).data('file'));
  10.  
  11. }
[JAVASCRIPT] pobierz, plaintext

to jest istotna część skryptu, reszta nie miała wpływu; sprawdziłem kilkukrotnie

W tej konfiguracji Uploadify zachowywało się dość dziwnie. Przeniesienie kodu z metody flashUpload bezpośrednio do ciała beginUpload rozwiązało problemy. Do tej pory nie wiem, dlaczego...

Cóż, współpraca Flasha z przeglądarkami zawsze była trochę dziwna. tongue.gif
wookieb
Cytat(erix @ 22.07.2010, 11:04:46 ) *
I podejrzewam, że jest to jakiś wewnętrzny problem flasha, bo raz ustawionego zdarzenia wywoływanego przez External.call nie można po prostu przeciążyć... I to jest ból, na który zmarnowałem 2 dni.

ExternalInterface nie wywołuje zdarzeń tylko funkcje jakie podasz w argumencie. Wówczas zostanie odpalony aktualny kod funkcji, więc może po prostu uploadify gdzieś blokował przechwycenie zdarzenia. Generalnie ExternalInterface nigdy mnie nie zawiódł nawet przy dynamicznie zmienianym kodzie JS.

erix
Ok, inaczej - miałem na myśli to, że przy wywoływaniu ExternalInterface.call parametru nie dało się przeciążyć. Nie zagłębiałem się mocno w to, co siedziało w bebechach Uploadify od strony AS. winksmiley.jpg

Cytat
więc może po prostu uploadify gdzieś blokował przechwycenie zdarzenia

Możliwe. Implementacja JS Uploadify jest - hmm - lekko mówiąc: dziwna...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.