2009-06-24 46 views
39

Trường hợp sử dụng: người dùng nhấp vào liên kết trên trang web - bùng nổ! tải các tập tin ngồi trong thư mục của mình.
tôi đã cố gắng để đóng gói các file sử dụng multipart/mixed message, nhưng nó dường như chỉ làm việc cho FirefoxCách tải xuống nhiều tệp với một yêu cầu HTTP?

Đây là cách phản ứng của tôi trông giống như:

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-- 

Cảm ơn bạn

T.B. Không, việc nén tệp không phải là tùy chọn

+0

Đó có phải là phản hồi thực tế không? Hay bạn đã cắt ra những thứ như Độ dài nội dung cho mỗi tệp đính kèm? Nếu điều đó không hiệu quả, tôi ít nhiều cho rằng nó không thể được thực hiện với thế hệ trình duyệt web hiện tại. – Joe

+1

mục đích của việc này là gì? có thể có một cách tốt hơn ... –

+0

Thực ra, độ dài nội dung có thể thậm chí không được yêu cầu bây giờ mà tôi đang xem các rfcs. – Joe

Trả lời

29

Nén là tùy chọn duy nhất có kết quả nhất quán trên tất cả các trình duyệt. Nếu nó không phải là một lựa chọn bởi vì bạn không biết zips có thể được tạo động, tốt, họ có thể. Nếu đó không phải là tùy chọn vì bạn có mối thù với các tệp zip, thì ..

MIME/multipart dành cho thông báo email và/hoặc truyền POST tới máy chủ HTTP. Nó không bao giờ có ý định được nhận và phân tích cú pháp ở phía máy khách của một giao dịch HTTP. Một số trình duyệt thực hiện nó, một số trình duyệt khác thì không.

Là một giải pháp thay thế khác, bạn có thể có một tập lệnh JavaScript mở các cửa sổ tải xuống các tệp riêng lẻ. Hoặc một Java Applet (yêu cầu Java Runtimes trên các máy, nếu nó là một ứng dụng doanh nghiệp, đó không phải là vấn đề [vì NetAdmin có thể triển khai nó trên các máy trạm]) sẽ tải xuống các tệp trong một thư mục do người dùng lựa chọn.

+0

Nén không phải là một tùy chọn vì yêu cầu không yêu cầu người dùng thực hiện thao tác bổ sung sau khi tải xuống. Thông báo của bạn rằng các thư đa phần không dành cho việc chuyển HTTP không có ý nghĩa gì. Ví dụ: nhiều tệp được tải lên bằng cách sử dụng multipart/form-data. Tôi không thấy bất kỳ lý do nào tại sao các thông điệp nhiều phần bị cấm cho tải xuống nhị phân – zakovyrya

+1

@zakovyrya: Hãy để tôi thuật lại câu nói cuối cùng đó. các thông điệp nhiều phần không bao giờ có ý định được nhận và phân tích cú pháp ở phía máy khách của một giao dịch HTTP. –

+0

Hu?Bạn nghĩ tệp tải lên từ trình duyệt hoạt động như thế nào? – Einstein

1

Hãy nhớ thực hiện việc này> 10 năm trước trong netscape 4 ngày. Nó sử dụng các ranh giới như những gì bạn đang làm và không làm việc gì cả với các trình duyệt khác tại thời điểm đó.

Trong khi nó không trả lời câu hỏi của bạn HTTP 1.1 hỗ trợ yêu cầu pipelining để ít nhất là cùng một kết nối TCP có thể được tái sử dụng để tải xuống nhiều hình ảnh.

0

Bạn có thể sử dụng mã hóa base64 để nhúng hình ảnh (rất nhỏ) vào tài liệu HTML, tuy nhiên từ quan điểm trình duyệt/máy chủ, bạn vẫn chỉ gửi 1 tài liệu về mặt kỹ thuật. Có lẽ đây là những gì bạn định làm?

Embedd Images into HTML using Base64

EDIT: i chỉ nhận ra rằng hầu hết các phương pháp tôi tìm thấy trong tìm kiếm google của tôi chỉ hỗ trợ firefox, và không IE.

+1

Các URI dữ liệu được hỗ trợ khá tốt ngay bây giờ (http://stackoverflow.com/questions/1765342/which-browsers-support-data-uris-and-since-which-version), nhưng chúng sẽ không trợ giúp với câu hỏi này. – Brilliand

Các vấn đề liên quan