Yêu cầu python lấy kích thước tệp mà không cần tải xuống tệp

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
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
4,
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
5,
Offset | Bytes | Description
12 | 4 | Size of central directory
16 | 4 | Offset of start of CD, relative to start of archive
6. Bạn nên tải cái nào?

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 HTTP

Tô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 Docs

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 yêu cầu các tiêu đề sẽ được trả về nếu thay vào đó URL của 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 được yêu cầu bằng 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
8

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 HTTP

Bạ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
5

Tiê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 ZIP

ZIP 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
  1. 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
    12 | 4 | Size of central directory
    16 | 4 | Offset of start of CD, relative to start of archive
    7 và đọc tiêu đề phản hồi
    Offset | Bytes | Description
    12 | 4 | Size of central directory
    16 | 4 | Offset of start of CD, relative to start of archive
    2
  2. 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
    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
    5. EOCD luôn nằm ở cuối tệp ZIP và có 22 byte
  3. 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
    12 | 4 | Size of central directory
    16 | 4 | Offset of start of CD, relative to start of archive
    8 với
    Offset | Bytes | Description
    12 | 4 | Size of central directory
    16 | 4 | Offset of start of CD, relative to start of archive
    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
    Offset | Bytes | Description
    40 | 8 | Size of central directory
    48 | 8 | Offset of start of CD, relative to start of archive
    7
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
5

5. Ở 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

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

Trong 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

Làm cách nào để xem tệp lớn như thế nào trước khi tải xuống?

Để biết kích thước tệp của một tệp tải xuống mà kích thước không được máy chủ web trả về, bạn sẽ phải thử tải xuống tệp bằng trình quản lý tải xuống như Trình quản lý tải xuống Chrono< . Trong hầu hết các trường hợp, trình quản lý tải xuống sẽ quét kích thước tệp trước khi tiến hành tải xuống. . The download manager will in most cases scan the file size before it proceeds to do the download.

Cái nào tính toán kích thước của một tệp trong Python?

Ví dụ 1. Sử dụng mô-đun os . Sử dụng thuộc tính st_size của phương thức stat[] để lấy kích thước tệp . Đơn vị của kích thước tệp là byte.

Kích thước tập tin của tôi là gì?

Xem kích thước tệp trong Windows File Explorer . Để xem kích thước của các tệp, bạn phải chuyển chế độ xem sang "Chi tiết". Để làm điều đó, hãy nhấp vào nút "Tùy chọn khác" ở góc trên cùng bên phải của Windows Explorer và chọn "Chi tiết". The rightmost "Size" column displays the size of the files. To view the sizes of the files you have to switch the view to "Details". To do that click the "More options" button at the top-right corner of Windows Explorer and select "Details".

Chủ Đề