Có thể biết nội dung tệp ZIP trước khi tải xuống không? . 🔮
Định dạng tệp ZIP có cấu trúc rõ ràng [hình ảnh trên Bapt]
Hãy tưởng tượng kịch bản sau đây
Cách đây một thời gian, bạn đã dọn sạch một số dung lượng trên ổ cứng máy tính xách tay của mình và bạn đã tải lên đám mây ba tệp ZIP lớn [mỗi tệp 8 GB]. Bây giờ bạn muốn xem bộ phim yêu thích của mình và bạn biết rằng nó nằm trong một trong những kho lưu trữ đã tải lên. Tuy nhiên, bạn đang đi nghỉ và sử dụng truyền dữ liệu từ điện thoại di động nên kết nối của bạn chậm và bạn phải trả thêm phí khi truyền vượt quá 10 GB. Ba tệp được gọi là.
Offset | Bytes | Description
4,
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
5,
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
6. Bạn nên tải cái nào?
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
Nếu bạn tò mò về cách giải quyết vấn đề như vậy và muốn tìm hiểu điều gì đó về AWS, định dạng tệp ZIP và yêu cầu HTTP, hãy tiếp tục đọc
Dịch vụ web Amazon [AWS]Serverless là một công nghệ thực sự tuyệt vời. Nó cho phép chúng tôi viết và triển khai mã thực thi mà không phải xử lý tất cả các vấn đề của cơ sở hạ tầng bên dưới
Trong bài viết này, bạn sẽ tìm hiểu cách tận dụng một chút sức mạnh của hai dịch vụ serverless do AWS cung cấp. S3 và Lambda
- Amazon Simple Storage Service [Amazon S3] —một dịch vụ lưu trữ đối tượng được xây dựng để truy xuất mọi dữ liệu từ mọi nơi,
- AWS Lambda — dịch vụ điện toán hướng sự kiện chạy mã
Cả hai dịch vụ đều không có máy chủ, nghĩa là bạn thậm chí không cần phải suy nghĩ về máy chủ hoặc cụm vì mọi thứ đều do AWS quản lý ☁️
Phương thức ĐẦU HTTPTôi cá là bạn đã biết một số phương thức yêu cầu HTTP như
- LẤY,
- BƯU KIỆN,
- ĐẶT,
- XÓA BỎ
Nhưng bạn đã bao giờ nghe nói về phương thức HTTP
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
7 chưa? . Để cụ thể hơn, chúng ta hãy xem MDN Web DocsPhương thức HTTP
Offset | Bytes | Description
7 yêu cầu các tiêu đề sẽ được trả về nếu thay vào đó URL của yêu cầu
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
7 được yêu cầu bằng phương thức HTTP
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
8
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
Nói cách khác, nếu bạn thực hiện yêu cầu
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
7, bạn chỉ nhận được các tiêu đề phản hồi. Một trong các tiêu đề là tiêu đề Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
2, cho biết kích thước của nội dung thưTiêu đề yêu cầu Phạm vi HTTPBạn vừa tìm hiểu về phương thức yêu cầu
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
7, nhưng cũng có điều gì đó mới mẻ về phương thức nổi tiếng Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
8 — một tiêu đề yêu cầu HTTP Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
5Tiêu đề yêu cầu này cho biết phần tài liệu mà máy chủ sẽ trả về. Ví dụ: bạn có thể gửi yêu cầu
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
8 với tiêu đề Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
7 và bạn nhận được byte từ phạm vi yêu cầu đã cho [trong trường hợp này, bạn sẽ nhận được 100 byte, bắt đầu từ byte thứ 100 của tệp]định dạng tệp ZIPZIP là một định dạng tệp lưu trữ. Đây là một đặc điểm kỹ thuật toàn diện của. Định dạng tệp ZIP. Thông số kỹ thuật rất kỹ thuật - tôi đã đọc nó, vì vậy bạn không cần phải
Đối với mục đích của chúng tôi, chỉ cần biết rằng các tệp ZIP có cấu trúc được xác định rõ ràng là đủ. Mỗi tệp ZIP được xác định chính xác bởi một
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
8 [bản ghi EOCD]. Bản ghi EOCD nằm ở cuối cấu trúc lưu trữ. Tệp ZIP cũng chứa một Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
9 [mục nhập CD], chỉ định tên của từng tệp hoặc thư mục trong kho lưu trữ cùng với siêu dữ liệu khác về mục nhập và phần bù trỏ đến dữ liệu mục nhập thực tếBố cục bên trong ZIP-64 [Wikipedia]
Định dạng tệp ZIP tiêu chuẩn có giới hạn 4 GB. Nếu một tệp có dung lượng lớn hơn 4 GB, tệp đó sẽ được lưu trữ ở phiên bản mới hơn của định dạng tệp ZIP —
Offset | Bytes | Description
40 | 8 | Size of central directory
48 | 8 | Offset of start of CD, relative to start of archive
0. Có một số khác biệt về định dạng, đối với chúng tôi, điều quan trọng nhất là bản ghi ZIP64 EOCD bổ sung và công cụ định vị[local file header 1..n]
[encryption header 1..n]
[file data 1..n]
[data descriptor 1..n]
...
[central directory header 1..n]
[zip64 end of central directory record]
[zip64 end of central directory locator]
[end of central directory record]
Cuối cùng thì phần cuối của lý thuyết cần thiết để hiểu thuật toán 🎉
thuật toán- Trước tiên, bạn cần biết kích thước tệp. Có thể nhận được bằng cách gửi yêu cầu
Offset | Bytes | Description
7 và đọc tiêu đề phản hồi
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
2
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive - Sau đó, bạn có thể tìm nạp bản ghi EOCD bằng cách gửi yêu cầu
Offset | Bytes | Description
8 với tiêu đề yêu cầu
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
5. EOCD luôn nằm ở cuối tệp ZIP và có 22 byte
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive - Từ bản ghi EOCD, bạn có thể lấy siêu dữ liệu CD. Thông tin cần thiết là kích thước của đĩa CD và độ lệch khi bắt đầu. Chúng luôn lấy byte từ 12 đến 20. Đối với EOCD, bạn có thể gửi yêu cầu
Offset | Bytes | Description
8 với
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
5 được chỉ định. Đừng quên phân tích cú pháp dữ liệu đã nhận, bởi vì theo thông số kỹ thuật “Tất cả các giá trị PHẢI được lưu trữ trong byte cuối nhỏ”, nhưng bạn yêu cầu một
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archiveOffset | Bytes | Description
7
40 | 8 | Size of central directory
48 | 8 | Offset of start of CD, relative to start of archive
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
4. Có siêu dữ liệu CD [bắt đầu và kích thước của nó], bạn có thể tự tìm nạp CD. Một lần nữa, nó có thể được thực hiện bằng cách gửi một yêu cầu
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
8 với tiêu đề yêu cầu Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
55. Ở bước áp chót, bạn chỉ cần đọc luồng byte. CD và EOCD được đặt trực tiếp với nhau, do đó, cả hai đều cho phép đọc khối byte
6. Cuối cùng, có một mẹo cuối cùng. Có thể mở các byte CD+EOCD dưới dạng tệp ZIP. Với nó, bạn có thể làm bất cứ điều gì, ví dụ, lặp lại các tệp trong danh sách tệp và in tất cả các tên tệp
ZIP64
Như đã đề cập, cấu trúc ZIP và ZIP64 hơi khác một chút. Đối với cái sau, thuật toán cũng giống như vậy. Điểm khác biệt duy nhất là bạn cần tải thêm bản ghi ZIP64 EOCD và bộ định vị ZIP64 EOCD. Sau đó, các khối bốn byte [bản ghi CD+EOCD64+bộ định vị EOCD64+EOCD] có thể được đọc và mở dưới dạng tệp ZIP
Offset | Bytes | Description
40 | 8 | Size of central directory
48 | 8 | Offset of start of CD, relative to start of archive
MãDưới đây, bạn có thể tìm thấy một ví dụ hoạt động về mã để in nội dung tệp ZIP mà không cần tải xuống toàn bộ tệp
Đoạn mã sau hoạt động cho các tệp nằm trong nhóm S3. Hàm Lambda được gọi trên Thông báo sự kiện S3
Sau khi in tất cả các tệp, bạn có thể tìm bộ phim yêu thích của mình và chỉ tải xuống một tệp ZIP, đảm bảo 100% rằng bạn chọn đúng kho lưu trữ
Bản tóm tắtTrong bài viết, tôi đã hướng dẫn các bạn cách liệt kê nội dung tệp ZIP mà không cần tải xuống. Có thể bằng cách sử dụng các phương thức và tiêu đề yêu cầu HTTP và biết cấu trúc định dạng tệp ZIP