Czytałem o ograniczeniach zabezpieczeń dotyczących przesyłania plików w programie Flash Player 10. Zgodnie z FileReference docs for upload(), przesyłanie nie musi być uruchamiane przez akcję zainicjowaną przez użytkownika (funkcja browse() ma, ale to już inna historia). Jeśli tak, to zmusiłoby to niezręczne wrażenia użytkownika w przypadku wysyłania wielu plików, ponieważ może nastąpić tylko jedno przesyłanie naraz - więc użytkownik musiałby kliknąć (lub nacisnąć przycisk) raz na plik, aby rozpocząć przesyłanie, ale tylko po zakończeniu poprzedniego przesyłania pliku.Omówienie modelu zabezpieczeń programu Flash Player 10 do przesyłania plików
documentation for URLLoader.load(), z drugiej strony, stwierdza:
W programie Flash Player 10 i później, jeśli użyty zostanie wieloczęściowy Content-Type (dla przykład "wieloczęściowy/form-data"), które zawiera wczytywania (wskazywane przez parametr „filename” w „content-Disposition” nagłówka w organizmie POST ), operacja POST podlega regułom zabezpieczeń zastosowanym do przesyłanych:
operację POST należy wykonać w odpowiedzi na użytkownika -inicjowana akcja, taka jak kliknięcie myszą lub naciśnięcie klawisza.
This Flash Security article potwierdza dokumentację URLLoader (patrz rozdział "post API").
Oryginalny whitepaper jednak nie wskazuje, to - tylko że FileReference przeglądania musi być w odpowiedzi na działania użytkownika, a nie (potencjalnie URLLoader-driven) przesłać sobie:
Gdy plik SWF używa FileReference.browse() i FileReference.upload() metod, aby przesłać plik na serwer, odtwarzacz Flash wymusza dwie reguły zabezpieczeń:
- FileReference.browse() musi zostać wywołany z poziomu obsługi zdarzeń zdarzeń użytkownika (zdarzenia myszy lub klawiatury).
[...]
Flash Player wymusza te same zasady każdym razem, gdy sieci API jest powołany do wykonywania testu POST, który pojawia się z serwerem aby zawierać przesyłanie.
O ile mogę powiedzieć od rzeczywistego wykorzystania API URLLoader przekazać plik, gdy przesłane rzeczywiście nie muszą pochodzić z działania użytkownika; ale czy to dlatego, że używam wersji debugującej odtwarzacza, czy też dokumentacja jest nieprawidłowa? (Lub coś innego?)
TL; DR: Dokumentacja zawiera sprzeczne informacje i nie ufam moim testom terenowym (w obliczu dokumentów, które mówią, że nie powinny działać). Czy można użyć URLLoader do przesłania pliku bez interakcji użytkownika? Czy tylko FileReference? (To zabiłoby większość możliwości wstępnego przetwarzania plików, i właśnie to mnie zainteresowało!)
Ah, to z powodu odtwarzacza Debug! Ale, o ile wiem, FileReference * może * przesyłać pliki bez interakcji użytkownika (po prostu nie może * przeglądać * dla nich). Nienawidzę podwójnych standardów. – Cameron
Jak napisałeś w swoim pytaniu i zgodnie z adobe.com, 'FileReference.browse()' musi zostać wywołane przed 'FileReference.Upload()'. – Den
Tak, rozumiem :-) Ale wyobraź sobie, że użytkownik klika przycisk "przeglądaj" i wybiera 17 plików za pomocą 'FileReferenceList'. Te 17 plików można następnie przesłać bez dalszej interakcji użytkownika. Jeśli jednak chcemy je zmodyfikować w jakiś sposób przed ich przesłaniem (np. Zmiana rozmiaru plików graficznych na kliencie), użytkownik musiałby kliknąć jeszcze 17 razy, aby zainicjować każdy ładunek (URLLoader). Tak właśnie miałem na myśli podwójne standardy. Oczywiście, nikt nie * faktycznie * zmusi swoich użytkowników do kliknięcia 17 razy, gdy istnieją akceptowalne rozwiązania (takie jak kodowanie Base64). – Cameron