Nie jestem pewien, czy jest to możliwe przy użyciu standardowych technologii internetowych.
Chcę, aby użytkownik mógł pobrać wiele plików za jednym razem. Oznacza to kliknięcie pól wyboru obok plików, a następnie pobranie wszystkich zaznaczonych plików.
Czy to możliwe - jeśli tak, jaką podstawową strategię Pan poleca. Wiem, że mogę użyć technologii Comets do tworzenia zdarzeń po stronie serwera, które wyzwalają HttpResponse, ale mam nadzieję, że istnieje prostszy sposób.
http
web-applications
download
Ankur
źródło
źródło
źródło
link.setAttribute('download', null);
zmieniono nazwy wszystkich moich plików na null.link.setAttribute('download',filename)
wewnętrzną pętlę. Dzięki temu możesz dowolnie nazywać pliki. Uważam też, że musi to być nazwa pliku bez adresu URL. Skończyło się na wysłaniu dwóch tablic: jednej z pełnym adresem URL, a drugiej z samą nazwą pliku.Minecraft.jar
.Możesz utworzyć tymczasowy zestaw ukrytych ramek iframe, zainicjować pobieranie w nich GET lub POST, poczekać na rozpoczęcie pobierania i usunąć ramki iframe:
Lub bez jQuery:
źródło
setTimeout()
?To rozwiązanie działa w różnych przeglądarkach i nie powoduje ostrzeżeń. Zamiast tworzyć plik
iframe
, tutaj tworzymy łącze do każdego pliku. Zapobiega to wyświetlaniu się komunikatów ostrzegawczych.Do obsługi części zapętlonej używamy
setTimeout
, co jest niezbędne, aby działała w IE.źródło
Google Chrome Version 76.0.3809.100 (Official Build) (64-bit)
.Najłatwiejszym sposobem byłoby udostępnienie wielu plików spakowanych w plik ZIP.
Przypuszczam, że możesz zainicjować pobieranie wielu plików za pomocą wielu ramek iframe lub wyskakujących okienek, ale z punktu widzenia użyteczności plik ZIP jest jeszcze lepszy. Kto chce klikać dziesięć okien dialogowych „Zapisz jako”, które otworzy przeglądarka?
źródło
Zgadzam się, że plik zip jest lepszym rozwiązaniem ... Ale jeśli musisz przesłać wiele plików, oto rozwiązanie, które wymyśliłem. Działa w IE 9 i nowszych (być może też niższych wersjach - nie testowałem), Firefox, Safari i Chrome. Chrome wyświetli komunikat do użytkownika, aby uzyskać zgodę na pobranie wielu plików przy pierwszym użyciu witryny.
Jedynym efektem ubocznym tej techniki jest to, że użytkownik zobaczy opóźnienie między przesłaniem a wyświetleniem okna dialogowego pobierania. Aby zminimalizować ten efekt, sugeruję użycie techniki opisanej tutaj i na to pytanie Wykryj, kiedy przeglądarka odbiera pobieranie pliku, które polega na ustawieniu pliku cookie z Twoim plikiem, aby wiedzieć, że rozpoczął się pobieranie. Będziesz musiał sprawdzić ten plik cookie po stronie klienta i wysłać go po stronie serwera. Nie zapomnij ustawić właściwej ścieżki do pliku cookie, w przeciwnym razie możesz go nie widzieć. Będziesz także musiał dostosować rozwiązanie do pobierania wielu plików.
źródło
Odpowiedzi w wersji jQuery elementu iframe:
źródło
download(['http://nogin.info/cv.doc','http://nogin.info/cv.doc']);
nie działa to jednak w przypadku pobierania plików graficznych.Rozwiązanie kątowe:
działający przykład: https://plnkr.co/edit/XynXRS7c742JPfCA3IpE?p=preview
źródło
Aby poprawić odpowiedź @Dmitry Nogin: to zadziałało w moim przypadku.
Jednak nie jest to testowane, ponieważ nie jestem pewien, jak działa okno dialogowe plików w różnych kombinacjach systemu operacyjnego / przeglądarki. (Stąd wiki społeczności.)
źródło
Działa to we wszystkich przeglądarkach (IE11, Firefox, Edge, Chrome i Chrome Mobile) Moje dokumenty są w wielu wybranych elementach. Wygląda na to, że przeglądarki mają problemy, gdy próbujesz zrobić to zbyt szybko ... Więc użyłem limitu czasu.
To rozwiązanie wykorzystujące obietnice:
źródło
Zdecydowanie najłatwiejsze rozwiązanie (przynajmniej w systemie ubuntu / linux):
Działa jak marzenie.
źródło
Aby rozwiązać ten problem, stworzyłem bibliotekę JS do przesyłania strumieniowego wielu plików bezpośrednio do zip po stronie klienta. Główną unikalną cechą jest to, że nie ma ograniczeń rozmiaru z pamięci (wszystko jest przesyłane strumieniowo) ani formatu zip (używa zip64, jeśli zawartość jest większa niż 4 GB).
Ponieważ nie wykonuje kompresji, jest również bardzo wydajny.
Znajdź plik „downzip” na npm lub github !
źródło
Poniższy skrypt wykonał tę pracę z wdziękiem.
źródło
Szukam rozwiązania, aby to zrobić, ale rozpakowanie plików w javascript nie było tak czyste, jak mi się podobało. Zdecydowałem się zamknąć pliki w jednym pliku SVG.
Jeśli masz pliki zapisane na serwerze (ja nie mam), możesz po prostu ustawić href w SVG.
W moim przypadku przekonwertuję pliki do base64 i osadzę je w SVG.
Edycja: SVG działał bardzo dobrze. Jeśli masz zamiar tylko pobrać pliki, ZIP może być lepszy. Jeśli masz zamiar wyświetlić pliki, SVG wydaje się lepszy.
źródło
Korzystając z komponentów Ajax, można rozpocząć pobieranie wielu plików. Dlatego musisz użyć https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow
Dodaj wystąpienie AJAXDownload do swojej strony lub cokolwiek innego. Utwórz AjaxButton i zastąp onSubmit. Utwórz zachowanie AbstractAjaxTimerBehavior i rozpocznij pobieranie.
Miłego pobierania!
źródło
Poniżej kod w 100% działający.
Krok 1 : Wklej poniższy kod w pliku index.html
Krok 2 : Wklej poniżej kodu w index.js pliku
UWAGA : Upewnij się, że wszystkie trzy pliki, które mają zostać pobrane, zostaną umieszczone w tym samym folderze wraz z plikami angularProject / index.html lub angularProject / index.js .
źródło
Pobieranie listy adresów URL z wywołaniem ajax, a następnie użycie wtyczki jquery do równoległego pobierania wielu plików.
źródło
Oto sposób, w jaki to robię. Otwieram wiele plików ZIP, ale także innego rodzaju dane (eksportuję projekt w formacie PDF i jednocześnie wiele plików ZIP z dokumentem).
Po prostu skopiowałem część mojego kodu. Połączenie z przycisku na liście:
Czyli podstawowe wywołanie procedury JS (podstawowe zasady!). oto procedura JS:
Sztuczka polega na tym, aby NIE podawać bezpośredniego linku do pliku ZIP, ale wysłać go do przeglądarki. Lubię to:
źródło
źródło