Làm thế nào để tải xuống có thể tạm dừng hoạt động?


19

Tôi sử dụng Internet Download Manager (IDM) để tải xuống dữ liệu và tôi nhận thấy rằng trong cửa sổ tiến trình tải xuống, nó cho biết liệu tải xuống có thể tạm dừng hay không (có thể tiếp tục lại). Thông thường, các trang web chia sẻ tệp không cho phép chuyển tiếp được nối lại nếu kết nối bị hỏng.

Vì vậy, câu hỏi là: làm thế nào để làm việc này? Đây có phải là một số cấu hình được thực hiện trên máy chủ không? Điều này khác với tải xuống torrent như thế nào, nơi tải xuống luôn có khả năng tiếp tục.

Câu trả lời:


27

Từ góc độ mã hóa, tải xuống chỉ là một mảng byte được bao gồm trong luồng phản hồi HTTP.

Các giao thức HTTP 1.1 (xem trang 30) bao gồm một trường trong header được gọi là 'Range', cho phép các yêu cầu để xác định byte offset và chiều dài của đáp ứng được yêu cầu.

Vì vậy, về bản chất, bạn có thể nói, "đưa cho tôi đối tượng HTTP tại URL này, nhưng tôi chỉ muốn các byte thứ 1024 - 4096 của nó". Trình duyệt máy khách sau đó nối thêm luồng byte vào phần tệp đã được tải xuống. Máy khách có thể cho biết nơi cần tiếp tục đơn giản bằng cách kiểm tra độ dài của tệp đã tải xuống và tăng nó để xác định độ lệch cần thiết.

Về cách trình quản lý tải xuống của bạn có thể cho biết, nó sẽ gửi yêu cầu "ĐẦU" HTTP. Nếu mã phản hồi là 206 (nội dung một phần), thì luồng http hỗ trợ nối lại.


FTP cũng là một giao thức thường được sử dụng để truyền tệp. Nó từng là phương tiện chính, mặc dù bây giờ HTTP có lẽ phổ biến hơn.
ChrisInEdmont

FTP về cơ bản sử dụng cùng một cấu trúc, mặc dù tôi phải tìm kiếm các chi tiết cụ thể trước khi tôi cố gắng triển khai mã sử dụng nó.
Frank Thomas

1

Điều này có thể được xử lý bằng cookie liên tục , không bị nhầm lẫn với cookie phiên hoặc bạn có thể sử dụng [Viewstate] nếu trang web được xây dựng trên ASP.NET, tuy nhiên đây không phải là một cách thực hành tốt. Frank Thomas có câu trả lời tốt nhất.


1
Tôi không chắc chắn lý do câu trả lời này đã bị hạ cấp vì vậy tôi đã đánh giá cao nó.
Ramhound

@FrankThomas, tôi vừa xác nhận một số sự thật với nhà phát triển cấp cao của chúng tôi và anh ta nói rằng bạn 'có thể' sử dụng cookie liên tục hoặc viewstate để lưu trữ thông tin chỉ mục của mảng byte được sử dụng để theo dõi và tiếp tục tải xuống thông qua trình tải xuống dựa trên trình duyệt, tuy nhiên không phải vậy một thực hành tốt. Thông thường, đối với các tệp có thể khôi phục lớn, chẳng hạn như sản phẩm MS, bạn sẽ tải xuống ứng dụng Trình quản lý tải xuống và nó sẽ hoạt động như bạn đã nói. Tôi đã nâng cao câu trả lời của bạn.
Josh Campbell

Câu trả lời này dường như vô nghĩa. Đây không phải là vấn đề xác định số lượng tệp đã được tải xuống; khách hàng đã biết điều này rồi Bạn có thể giao tiếp trở lại máy chủ bằng cookie, nhưng có nhiều cách tiếp cận tốt hơn. Các tiêu đề, các thông số GET hoặc POST, v.v. Câu hỏi đặt ra là làm thế nào để truyền lại tập tin, chứ không phải làm thế nào để truyền thông tin đến một máy chủ.
ChrisInEdmont

OP đã hỏi nó hoạt động như thế nào và tôi chỉ cho anh ta theo hướng Cookies để anh ta có thể nghiên cứu thêm. Có hàng tá cách khác nhau mà một nhà phát triển có thể tạo ra một trình tải xuống có thể tiếp tục. Tôi đã thực hiện bằng cách sử dụng cookie trên máy khách để theo dõi trạng thái tải xuống thông qua chỉ mục bắt đầu dừng và sử dụng C # trên phần phụ trợ để tính toán số lượng đã được tải xuống (từ chỉ mục X đến chỉ mục Y) và sau đó tiếp tục từ Y. Người quản lý thực hiện chính xác điều tương tự, chỉ có nó lưu trữ thông tin của nó trong tệp văn bản hoặc cơ sở dữ liệu. Đây không phải là stackoverflow, tôi không viết mã nguồn.
Josh Campbell

@JoshCampbell, vấn đề là giải pháp của bạn chỉ hoạt động với những người sử dụng phần mềm máy khách và phần mềm máy chủ cụ thể của bạn. Có những cách tiêu chuẩn để giải quyết vấn đề này, như Frank chỉ ra trong câu trả lời của mình, và không cần phải mã hóa tùy chỉnh. Ngoài ra, câu trả lời của bạn không chỉ ra quá trình một số trang web cho phép OP tiếp tục tải xuống và do đó không trả lời câu hỏi. Đó là lý do tại sao tôi nhận xét.
ChrisInEdmont
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.