vaakian / vaakian.github.io

some notes
https://vaakian.github.io
3 stars 0 forks source link

Go便携文件服务器 #36

Open vaakian opened 2 years ago

vaakian commented 2 years ago

存下来自用

package main

import (
    "flag"
    "fmt"
    "net"
    "net/http"
)

func GetOutboundIP() net.IP {
    addrs, _ := net.InterfaceAddrs()
    for _, address := range addrs {
        if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
            if ipnet.IP.To4() != nil {
                return ipnet.IP
            }
        }
    }
    return net.IPv4(127, 0, 0, 1)
}

func main() {
    port := "8081"
    dir := "./"
    flag.StringVar(&port, "p", "28081", "port to listen on")
    flag.StringVar(&dir, "d", "./", "port to listen on")
    flag.Parse()
    fmt.Printf("http server listening on [http://%s:%s] -> [%s]\n", GetOutboundIP(), port, dir)
    // http.Handle("/", http.FileServer(http.Dir(dir)))

    fileHandler := http.FileServer(http.Dir(dir))

    http.ListenAndServe(":"+port, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.Header().Add("Expires", "0")
        w.Header().Add("Cache-Control", "max-age=0, no-cache, must-revalidate, proxy-revalidate")
        fmt.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL)
        fileHandler.ServeHTTP(w, r)
    }))
}

image