http-party / http-server

a simple zero-configuration command-line http server
MIT License
13.42k stars 1.48k forks source link

Add simple implementation of serving directories as zip files #836

Open kimsey0 opened 1 year ago

kimsey0 commented 1 year ago

This is a first draft of a new functionality that allows downloading the contents of a directory as a zip file. See the issue linked below for why I think this would be useful.

It's implemented using the archiver library, which allows streaming the compressed files directly to the response. There are currently no automated tests, but the feature can be manually tested without any additional setup by running npm start and visiting http://localhost:8080/img.zip.

Questions I'd like answered before I continue the work:

  1. Is this something that could fit within the mission for http-server?
  2. Are there any concerns about the number or size of the dependencies? archiver adds quite a few transitive dependencies. The number could probably be reduced by using a lower-level library like zip-stream at the cost of more complex wrapping code.
  3. How should this be configured? I've currently added a --serve-dir-zip command line argument that controls it. Should it be enabled by default?
  4. What happens if there's a zip file with the same name as a directory? Right now, it's served instead of zipping the directory. The risk of collisions could potentially be reduced by serving directory zips at /directory/.zip instead of /directory.zip.
  5. Should other archive formats be supported? Support for tar files, optionally gzipped, is included archiver, so it's trivial to enable.
  6. And as a last minor question, should a link to the zip file be added to directory listings, and in that case where?
Relevant issues

Fixes #798.

Contributor checklist
Maintainer checklist
kimsey0 commented 1 year ago

@thornjad, perhaps you can help clear some of these up when you have time and energy? (In any case, thanks for this great utility. 😄)

kimsey0 commented 1 year ago

@thornjad, any chance you could answer a few of the questions above? :smile:

kimsey0 commented 1 year ago

@thornjad, any input on whether this could conceivably merge in the right state?

github-actions[bot] commented 6 months ago

This pull request has been inactive for 360 days

kimsey0 commented 6 months ago

@thornjad, I still think this would be useful. Any chance you think so too?