http-file-server
is a dependency-free HTTP file server. Beyond directory listings and file downloads, it lets you download a whole directory as .zip
or .tar.gz
(generated on-the-fly).
- Contents
- Examples
- Serving a path at
/
- Serving $PWD at
/
- Serving multiple paths, setting the HTTP port via CLI arguments
- Setting the HTTP port via environment variables
- Uploading files using cURL
- HTTPS (SSL/TLS)
- Custom Templates
- Create new folder
- Disable show hidden files or dirs
- Auth
- Auth single route
- Download selected
- Serving a path at
- Get it
- Use it
$ http-file-server /tmp
2018/11/13 23:00:03 serving local path "/tmp" on "/tmp/"
2018/11/13 23:00:03 redirecting to "/tmp/" from "/"
2018/11/13 23:00:03 http-file-server listening on ":8080"
$ cd /tmp
$ http-file-server
2018/12/13 03:18:00 serving local path "/tmp" on "/tmp/"
2018/12/13 03:18:00 redirecting to "/tmp/" from "/"
2018/12/13 03:18:00 http-file-server listening on ":8080"
$ http-file-server -p 1234 /1=/tmp /2=/var/tmp
2018/11/13 23:01:44 serving local path "/tmp" on "/1/"
2018/11/13 23:01:44 serving local path "/var/tmp" on "/2/"
2018/11/13 23:01:44 redirecting to "/1/" from "/"
2018/11/13 23:01:44 http-file-server listening on ":1234"
$ export PORT=9999
$ http-file-server /abc/def/ghi=/tmp
2018/11/13 23:05:52 serving local path "/tmp" on "/abc/def/ghi/"
2018/11/13 23:05:52 redirecting to "/abc/def/ghi/" from "/"
2018/11/13 23:05:52 http-file-server listening on ":9999"
$ http-file-server -uploads /=/path/to/serve
2020/03/10 22:00:54 serving local path "/path/to/serve" on "/"
2020/03/10 22:00:54 http-file-server listening on ":8080"
curl -LF "file=@example.txt" localhost:8080/path/to/upload/to
To terminate SSL at the file server, set -ssl-cert
(SSL_CERTIFICATE
) and -ssl-key
(SSL_KEY
) to the respective files' paths:
$ ./http-file-server -port 8443 -ssl-cert server.crt -ssl-key server.key
2020/03/10 22:00:54 http-file-server (HTTPS) listening on ":8443"
Create a folder and add base.html
Create a subfolder 'errors' and add html files named 'status code': 401.html, 404.html, 500.html...
example templates in /templates/
$ ./http-file-server -t ./templates
2022/12/02 00:27:24 Added custom templates: ./templates
Set -c
or --creates
The new directory will be created in the current directory with permissions 665
Note: The POST
HTML method is used with the URL request argument new
$ ./http-file-server -c ./
Disable show hidden files or dirs
You can disable the display of hidden files or directories using the -nh
or --nohidden
argument
Note. Does not affect downloading a directory as an archive.
$ ./http-file-server -nh ./
You can set Basic authorization for all routes using --user
and --passwd
$ ./http-file-server --user admin --passwd 123456 ./
You can set Basic authorization for a single route using the format user:passwd@/locatin=./local_path
$ ./http-file-server admin:1234@/home=/tmp/home
Note: The --user
and --passwd
arguments will be ignored.
For example:
$ ./http-file-server --user user1 --passwd 112233 admin:1234@/main=/tmp/home /home=/test2 /shara=/srv/shara
Here, for all routes, except for /main
, global authorization will apply (--user
(user1
) --passwd
(112233
))
You can download selected files or directory in zip
or tar.gz
archive
- The
POST
HTML method is used with azip
ortar.gz
URL request argument - Payload
items
valuefolder or directory name
separated by;
Url: /home/?zip
Payload: items=main.go;help;text1.txt;folder01
Method: Post
Headers: "Content-Type": "application/x-www-form-urlencoded"
go install github.com/noobcode73/http-file-server@latest
After this the executable is installed in go's normal directorys (see go help install
for more information)
GOPATH/http-file-server [OPTIONS] [[ROUTE=]PATH] [[ROUTE=]PATH...]
Usage of http-file-server:
-a string
(alias for -addr) (default ":8080")
-addr string
address to listen on (environment variable "ADDR") (default ":8080")
-c (alias for -creates)
-creates
allow creates folder (environment variable "CREATES")
-d (alias for -deletes)
-deletes
allow deletes (environment variable "DELETES")
-nh
(alias for -nohidden)
-nohidden
no allow hidden folders or files (environment variable "NO_HIDDEN")
-p int
(alias for -port)
-passwd string
global password for all routes (without auth) (environment variable "PASSWD").
-port int
port to listen on (overrides -addr port) (environment variable "PORT")
-q (alias for -quiet)
-quiet
disable all log output (environment variable "QUIET")
-r value
(alias for -route)
-route value
a route definition ROUTE=PATH (ROUTE defaults to basename of PATH if omitted)
-ssl-cert string
path to SSL server certificate (environment variable "SSL_CERTIFICATE")
-ssl-key string
path to SSL private key (environment variable "SSL_KEY")
-t string
(alias for -template)
-templates string
path to custom Templates folder html.
base template = base.html, errors template = "status_code".html (401.html, 404.html, etc.).
(environment variable "TEMPLATES")
-u (alias for -uploads)
-uploads
allow uploads (environment variable "UPLOADS")
-user string
global user name for all routes (without auth) (environment variable "USER").