2009-06-24 11 views
39

Przypadek użycia: użytkownik klika łącze na stronie - bum! ładunek plików znajdujących się w jego folderze.
Starałem się spakować pliki przy użyciu multipart/mixed message, ale wydaje się działać tylko dla FirefoksaJak pobrać wiele plików za pomocą jednego żądania HTTP?

To jest jak moja reakcja wygląda następująco:

HTTP/1.0 200 OK 
Connection: close 
Date: Wed, 24 Jun 2009 23:41:40 GMT 
Content-Type: multipart/mixed;boundary=AMZ90RFX875LKMFasdf09DDFF3 
Client-Date: Wed, 24 Jun 2009 23:41:40 GMT 
Client-Peer: 127.0.0.1:3000 
Client-Response-Num: 1 
MIME-Version: 1.0 
Status: 200 

--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="001.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="002.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
--AMZ90RFX875LKMFasdf09DDFF3-- 

Dziękuję

PS: Nie, skompresowanie plików nie jest opcją

+0

Czy to właściwa odpowiedź? A może wycinałeś rzeczy takie jak długość treści dla każdego załącznika? Jeśli to nie zadziała, mniej więcej zakładam, że nie można tego zrobić z obecną generacją przeglądarek internetowych. – Joe

+1

jaki jest tego cel? może być lepszy sposób ... –

+0

Właściwie długość zawartości może nie być nawet wymagana, gdy patrzę na rfcs. – Joe

Odpowiedz

29

Zipping jest jedyną opcją, która będzie miała spójny wynik we wszystkich przeglądarkach. Jeśli nie jest to opcja, ponieważ nie wiesz, że zip może być generowany dynamicznie, cóż, mogą. Jeśli nie jest to opcja, ponieważ masz pretensje do plików zip, dobrze ..

MIME/multipart jest dla wiadomości e-mail i/lub transmisji POST do serwera HTTP. Nigdy nie było przeznaczone do odbierania i analizowania po stronie klienta transakcji HTTP. Niektóre przeglądarki go realizują, inne nie.

Inną alternatywą może być skrypt JavaScript otwierający okna pobierające poszczególne pliki. Lub aplet Javy (wymaga Java Runtimes na maszynach, jeśli jest to aplikacja korporacyjna, która nie powinna stanowić problemu [jak NetAdmin może wdrożyć na stacjach roboczych]), która pobierałaby pliki w katalogu wybranym przez użytkownika.

+0

Zwalnianie nie jest opcją, ponieważ wymaganiem jest nie wymaganie od użytkownika wykonywania dodatkowej operacji po pobraniu. Twoje oświadczenie, że wiadomości wieloczęściowe nie są przeznaczone do przesyłania HTTP, nie ma sensu. Na przykład wiele plików jest przesyłanych za pomocą wieloczęściowych/formularzy danych. Nie widzę żadnego powodu, dla którego komunikaty wieloczęściowe powinny być zabronione w przypadku pobierania binarnego. – zakovyrya

+1

@zakovyrya: Pozwól, że zmienię to ostatnie zdanie. komunikaty wieloczęściowe nigdy nie miały być odbierane i analizowane po stronie klienta transakcji HTTP. –

+0

Hu?Jak sądzisz, jak działa wgrywanie plików z przeglądarki? – Einstein

1

Pamiętaj, że to> 10 lat temu w Netscape 4 dni. Używał granic, takich jak to, co robisz i nie działał w ogóle z innymi przeglądarkami w tym czasie.

Podczas gdy nie odpowiada na twoje pytanie HTTP 1.1 obsługuje potokowanie żądania, dzięki czemu co najmniej jedno połączenie TCP może być ponownie użyte, aby pobrać wiele obrazów.

0

Można użyć kodowania base64 do osadzenia (bardzo małego) obrazu w dokumencie HTML, jednak z punktu widzenia przeglądarki/serwera, technicznie wciąż wysyłany jest tylko 1 dokument. Może to właśnie zamierzasz zrobić?

Embedd Images into HTML using Base64

EDIT: Właśnie sobie sprawę, że większość metod znalazłem w moim google obsługują tylko Firefox i IE nie.

+1

Identyfikatory URI danych są teraz dość dobrze obsługiwane (http://stackoverflow.com/questions/1765342/which-browsers-support-data-uris-and-since-which-version), ale nie pomogą z tym pytaniem. – Brilliand

Powiązane problemy