2009-11-03 13 views
22

Proszę o rekomendacje dotyczące przesyłania skryptów/komponentów. Moje kryteria:Najlepszy składnik przesyłania danych inny niż Flash do aplikacji internetowych?

  • lampa
  • Plain ok JavaScript, jQuery ok
  • Musi zapewnić pasek postępu (zaktualizowane od na przykład wywołanie Ajax).

Prawdopodobnie nie jest to istotne, ale używam ASP.NET MVC po stronie serwera.

Dzięki

UPDATE Tak, wiem, że nie będzie musiał być składnikiem po stronie serwera do tego, ale mogę zapewnić, że. Bardziej interesują mnie skrypty po stronie klienta. (Być może niektóre rozwiązania będą powiązane z impedancjami po stronie serwera - nie wiem).

Dla wyjaśnienia - nie musi to być specyfikacja .net. Cieszę się, że mogę użyć komponentu, który przychodzi tylko z (na przykład) skryptami po stronie serwera PHP, i przetasować własny dla .net.


Dzięki za wszystkie odpowiedzi - niektóre bardzo przydatne informacje tam. W końcu zaakceptowałem "AJAX Uploader" - nie spełniało to wymogu paska postępu, ale wydaje się, że nic nie może (przynajmniej bez flashowania). Myślę, że przyjrzę się także możliwości stworzenia własnego, na podstawie niektórych informacji tutaj - odeślę z powrotem, jeśli będę miał szczęście.

Odpowiedz

13

Fine Uploader Używamy tego i jest całkiem niezły, mimo to warto spróbować.

Edycja: Z jakiegoś powodu myślałem, że użyliśmy Uploadify, okazało się, że to było to.

+2

thats flash based –

+0

Poprawiłem swój post, mam nadzieję, że to pomoże – TWith2Sugars

+2

Nie widziałem tego, dzięki. Chociaż wydaje się, że nie zapewnia on żadnego postępu w postępach. – UpTheCreek

5

Technologia po stronie serwera jest bardzo istotna dla tego, co próbujesz zrobić. Interakcja z serwerem jest niezbędna dla takich rzeczy.

Nie znam żadnego gotowego komponentu, ale ten article może być pomocny.

Na podstawie aktualizacji wydaje się, że szukasz komponentu klienta związanego z określoną technologią serwera i masz pewność, że możesz łatwo przekonwertować to na .NET. Moim zdaniem nie będzie to łatwe. Aby zaimplementować pasek postępu, potrzebujesz programu nasłuchującego przesyłania plików. W Javie miałem szczęście robić coś podobnego, używając Apache Commons FileUpload i implementując interfejs ProgressListener. Zasadniczo postępowałem zgodnie z instrukcjami na ten article. Poza odbiornikiem postępu, musiałem zaimplementować serwlet, który zwrócił obecny procent wysyłania, a po stronie klienta używał wtyczki jQuery paska postępu, którą regularnie aktualizowałem przez Ajax wywołujący procentowy serwlet. To są proste kawałki. Jak już zauważyłem, możesz z łatwością je wdrożyć w mgnieniu oka.

Najtrudniejszą częścią jest słuchanie postępu i jest to bardzo różne, w zależności od technologii serwera. Polecam więc zacząć od tego miejsca. Dowiedz się, jak możesz posłuchać postępów pliku przesłanego przy użyciu ASP.Net MVC. Powyższy artykuł jest dobrym punktem wyjścia.

+0

Tak, oczywiście, zdaję sobie sprawę, że będzie konieczna integracja po stronie serwera. Interesuje mnie znalezienie wstępnie stworzonych rzeczy po stronie klienta - skrypt nie dba o to, co wygenerowało odpowiedź JSON. – UpTheCreek

+0

Następnie zacznij od znalezienia odpowiedniej wtyczki paska postępu. Do aktualizacji z odpowiedzi JSON potrzebne jest mniej niż 10 linii kodu jQuery.Nawet jeśli znajdziesz gotową wtyczkę, kod konfiguracji potrzebny do dopasowania do twoich potrzeb będzie równie duży. – kgiannakakis

+0

No tak, wiem, że mógłbym zrobić to sam, ale chciałem sprawdzić, czy coś jest gotowe. Stąd to pytanie. – UpTheCreek

1

Komponenty do przesyłania plików flash w większości implementacji JavaScript są dostępne, ponieważ zapewniają większą ilość informacji o pliku i jego przesłaniu. co pozwala ci nieustannie dostarczać i tworzyć ramy zdarzeń dla pasków postępu.Najpopularniejszy jest oczywiście http://swfupload.org/

Flash ma dostęp do informacji o pliku, zanim rozpocznie się wysyłanie. za pomocą czystego rozwiązania JavaScript masz dostęp tylko do długości strumienia plików na serwerze, dopóki cały plik nie zostanie w całości odebrany i zapisany na dysku twardym serwera.

Poniższy bardzo stary klasyczny skrypt ASP dostarcza plik, który Twój javascript może sondować, który zawiera zawartość procentową ukończonego przesyłania otrzymanego do tej pory na serwerze.

http://www.freeaspupload.net/

nie jest klasą to właśnie robi dobrą robotę, co robi. Nie widziałem jeszcze bardziej nowoczesnej wersji .net.

+0

Po to, by wyjaśnić - nie musi to być specyfikacja .net. Cieszę się, że mogę użyć komponentu, który przychodzi tylko z (na przykład) skryptami po stronie serwera PHP, i przetasować własny dla .net. – UpTheCreek

+0

My też używamy swfupload. Nie widziałem środków do pisania postępów - barów bez Flasha/Javy, ale z przyjemnością poznam otheriwse :); Jestem sceptyczny, że serwer rzeczywiście reaguje, dopóki cały plik nie jest POST'd, dlatego nie można złożyć raportu% wiek otrzymanego podczas wysyłania - podczas gdy ja wierzę, że Flash robi stronę paska postępu w oparciu o% wydany wiek zamiast ODBIERAĆ). Bit po stronie serwera dekonstruowania mima multi = part jest dość bolesny zbyt IME (mucking about z Byte/Unicode conversion) – Kristen

+0

podstawowe podsumowanie, jak to zrobić bez flasha wymaga trochę więcej komunikacji z klientem podczas przesyłania. Serwer przetwarza dane przesyłania w porcjach podczas przesyłania strumieniowego, po każdym z nich zapisuje wszystkie informacje o przesłanych danych do pliku określonego przez ciąg zapytania klienta. Po kolei, gdy klient wysyła wysłany plik na serwer, może wielokrotnie odpytywać plik informacyjny, dopóki nie wskaże, że serwer otrzymał wszystko. Używając długości strumienia i przetworzonej długości możemy obliczyć procent dla paska postępu CSS lub JavaScript. –

0

Wypróbuj AsyncFileUpload dla aplikacji internetowych asp.net.

+0

Nie korzystałem wcześniej z biblioteki Ajax ASP.NET. Niestety, demo na stronie nie działa. Patrząc na podsumowanie, nie wygląda jednak na to, że obsługuje polling. – UpTheCreek

5

Zagraliśmy wokół z tego trochę dla projektu wewnętrznego, a nie sądzę, można spełnić Twoje kryteria non-Flash wyświetlaczu postępu. Powodem, dla którego programy przesyłające Flash są tak popularne, jest to, że JavaScript jest bardzo ograniczony w przeglądarkach po stronie klienta: ze względów bezpieczeństwa JavaScript nie ma dostępu do plików na dysku twardym klienta (więc nie ma sprawdzania długości pliku przed załadowaniem i brakiem fragmentów czytania samego pliku do przesłania), jest bardzo ograniczony w zakresie, w jakim może manipulować kontrolkami <input type='file'> (ponieważ w przeciwnym razie może wybrać i przesłać pliki bez wiedzy użytkownika), a może przesłać tylko plik jako zwykły lub zwykły POST "Zgłoszenie formularza (bez raportów postępu).

Nawet gdybyś mógł rozwiązać te problemy po stronie klienta, o ile mi wiadomo, każdy ogólny serwer WWW będzie czekał, aż otrzyma cały plik POST, zanim przekaże go do sieci po stronie serwera aplikacji, więc nie ma możliwości, aby komponent po stronie serwera aktualizował status, gdy otrzymuje każdą porcję.

Wygląda na to, że najlepiej jest zrobić coś takiego, jak AJAX Upload.

+0

Dzięki za podzielenie się swoimi doświadczeniami. – UpTheCreek

0

Nie sądzę, że istnieje komponent spełniający Twoje wymagania, ponieważ o ile mi wiadomo, każde rozwiązanie zapewniające pasek postępu jest oparte na technologii flash. ;)

Ale podobnie jak TWith2Sugars użyłem AjaxUpload i działa to pięknie, ale bez paska postępu.

+0

Dostępne są komponenty po stronie serwera, które będą rozpoznawane przez operację. Masz rację, że poza flash, silverlight lub podobną wtyczką do przeglądarki nie ma innych opcji dla klientów. –

Powiązane problemy