Skip to main content

Create a streamable and (somewhat) seekable .ZIP file

Project description

Similar systems/projects:

  • The Nginx zip module. Only for Nginx, so can’t be used with other webservers.

  • python-zipstream. Does not support calculating the file size beforehand or seeing through the file.

Usage:

import zipseeker

# Create an index
fp = zipseeker.ZipSeeker()
fp.add('some/file.txt')
fp.add('another/file.txt', 'file2.txt')

# Calculate the total file size, e.g. for the Content-Length HTTP header.
contentLength = fp.size()

# Calculate the last-modified date, e.g. for the Last-Modified HTTP header.
lastModified = fp.lastModified()

# Send the ZIP file to the client
# Optionally add the start and end parameters for range requests.
# Note that the ZIP format doesn't support actually skipping parts of the file,
# as it needs to calculate the CRC-32 of every file at the end of the file.
fp.writeStream(outputFile)

Why?

While the file size of a ZIP file usually can’t be calculated beforehand due to compression, this is actually optional. The headers itself also have a pretty constant size. That means that the whole file can have a predetermined file size (and modtime).

This is useful when you want to provide ZIP downloads of large directories with uncompressable files (e.g. images). The specific use case I created this media file for was to provide downloads of whole photo albums without such inconveniences as requesting a downloading link in an e-mail, using a lot system resources for the creation of temporary files, and having to delete these files afterwards.

Of course, it’s possible to just stream a ZIP file, but that won’t provide any progress indication for file downloads and certainly doesn’t support Range requests.

For more information, see the Nginx zip module.

TODO

  • Implement actual seeking in the file - this should be doable.

  • Use a CRC-32 cache that can be shared by the calling module.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zipseeker-1.0.11.tar.gz (5.8 kB view details)

Uploaded Source

File details

Details for the file zipseeker-1.0.11.tar.gz.

File metadata

  • Download URL: zipseeker-1.0.11.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for zipseeker-1.0.11.tar.gz
Algorithm Hash digest
SHA256 f0bc6b8dd5a66a8e09c98cb41ffeb31b83e2fc99d3f947afeda60c7605210e82
MD5 32b2d1e6ca5b213d2fd9b701cea6e2a5
BLAKE2b-256 352100435b5ea857c82ca47d305fbd569bb07d0f459100cdde8520eda2fd3139

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page