2009-10-31 82 views
7

Tôi cần một vài tệp lớn (vài hợp đồng biểu diễn) từ Java qua FTP/HTTP. Có thư viện sẵn sàng (java/công cụ dòng lệnh) để tạo điều kiện tải xuống không? Một số yêu cầu rõ ràng là:Trình quản lý tải xuống bằng Java

  1. Multi-kết nối tải - sẽ có thể mở nhiều kết nối đến máy chủ để tăng tốc việc tải xuống (như FlashGet/GetRight/...)
  2. Tiếp tục tải về

Chỉnh sửa - Tôi thực sự không muốn viết một thư viện như vậy nhưng ăn cắp nó (hoặc trả tiền) cho một thư viện lớp sản xuất thử nghiệm hiện có. rsynch không liên quan vì tôi cần tải xuống các tệp từ các trang web HTTP và FTP, nó không phải để chuyển tệp nội bộ.

Trả lời

2

Giao thức HTTP hỗ trợ bắt đầu tải xuống một phần ở mức bù trừ nhưng có hỗ trợ hạn chế để xác thực phiên bản cục bộ của tệp để đảm bảo rằng nó không có phần đính kèm vào cuối (hoặc một cái gì đó tương tự). Nếu môi trường của bạn cho phép, tôi khuyên bạn nên rsync với tùy chọn --partial. Nó được thiết kế để hỗ trợ loại chức năng này từ dòng lệnh.

Nếu bạn không thể sử dụng rsync, bạn có thể muốn thử làm việc với Commons-HTTPClient và sử dụng tiêu đề Phạm vi HTTP để tải xuống các khối có kích thước có thể quản lý.

2

Nếu bạn biết cách tạo ổ cắm và chỉ trong java thì điều đó không khó.

Trước tiên hãy tạo yêu cầu và đọc tiêu đề để nhận tiêu đề Content-length. Sau đó, đưa ra một chiến lược để chia nhỏ yêu cầu của bạn thành các khối ví dụ: 500K mỗi yêu cầu. Sau đó, bắt đầu nói 10 yêu cầu bằng cách sử dụng một chuỗi cho mỗi yêu cầu. Trong mỗi yêu cầu, bạn phải xác định tiêu đề Range.

Tiếp tục tải xuống của bạn là vấn đề lưu trữ các phạm vi bạn chưa tải xuống. Tôi khuyên bạn nên đọc các trường Tiêu đề HTTP/1.1 này RFC here nếu bạn thực sự muốn nắm bắt tốt về giao thức được sử dụng.

Tuy nhiên, nếu bạn đang tìm kiếm một cách dễ dàng rsync hoặc scp là đủ.

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