Basically I need read-only access via browsers to a large folder structure on my NAS, but I want:

  • the ability to somewhat rapidly search all files in the hierarchy based on their filename. Metadata not required for my use case, just the file names. It’s totally fine if there’s an initial indexing phase, but some sort of fsnotify-based “keep it up to date” function would be nice.
  • a very simple preview viewer, sort of like most cloud sharing sites (Dropbox has one for example), where various media files can be viewed/streamed in-browser. No need for any transcoding or anything like that - if the browser can’t play the codecs, it’s fine for it not to work. A download link is of course a good idea.
    • Ideally configurable - show previewer for files matching these mimetypes/extensions/etc., default to download otherwise.
  • decent design - nginx’s indexes suck, they cut off filenames that are even moderately long. Doesn’t have to be top-tier design team level stuff, but something with basic bootstrap/material would be much better than the ugly indexes.
  • (ideally) direct access - i.e. https://mynas.local/server-app/media/tv/ should open the app to that folder. It’s fine if that requires web server/proxy server support to do URL rewriting or whatever.
  • use the web server’s functionality for actually sending the files themselves - i.e. an app that opens the file, reads it into RAM and then sends it via the socket is far less efficient than the web server which can use sendfile. (If you’re writing an app, this can usually be done with a header in the response) This also ensures support for ranges and other stuff that web servers can provide to clients.
  • Read only is fine and ideal. If uploading is possible, should have some form of authentication required. (No auth engine needed for the read-only side, if anything I can configure my reverse proxy to add that.)
  • something that can run in Docker. This is not a very tall order these days though. :)

What I don’t need (if it’s there it’s fine but I don’t have a need for it)

  • creating sharing links
  • transcoding during streaming
  • user accounts
  • extreme levels of customizability (styling with custom CSS = fine)
  • upload support
  • “gallery” views (simple list with no thumbnails is fine, even in folders with images/videos/music)
  • metadata/content search - simple string search based on filenames is fine, imagine “find . > list.txt” followed by “cat list.txt | grep ‘search_term’”

Right now I’m just using good old nginx’s indexes, but they leave much much much to be desired as I’ve already commented on. I’ve started trying to build this idea multiple times and have a handful of very, very incomplete iterations, but I’ve never had the time to get it over the finish line. Plus I kinda suck at frontend web dev.