Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uploadify - upload tylko pierwszego pliku z kolejki i zonk
erix
post
Post #1





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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ż... (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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. (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 12:17