Browse Source

remove cache

liuyuqi-dellpc 1 year ago
parent
commit
410ab0a33a
3 changed files with 39 additions and 28 deletions
  1. 2 2
      Dockerfile
  2. 2 0
      README.md
  3. 35 26
      main.go

+ 2 - 2
Dockerfile

@@ -1,4 +1,4 @@
-FROM golang:1.13-alpine as base
+FROM golang:1.13-alpine as builder
 
 
 WORKDIR /app
 WORKDIR /app
 COPY . .
 COPY . .
@@ -8,7 +8,7 @@ FROM alpine:3.10
 
 
 VOLUME /data
 VOLUME /data
 WORKDIR /app
 WORKDIR /app
-COPY --from=base /app/fs-go .
+COPY --from=builder /app/fs-go .
 EXPOSE 8080
 EXPOSE 8080
 
 
 ENTRYPOINT ["/app/fs-go", "-dir", "/data"]
 ENTRYPOINT ["/app/fs-go", "-dir", "/data"]

+ 2 - 0
README.md

@@ -22,6 +22,8 @@ Starting the server is easy:
 $ ./fs-go -port 8080 -dir .
 $ ./fs-go -port 8080 -dir .
 $ /opt/fs-go/fs-go -addr 0.0.0.0:8081 -dir .
 $ /opt/fs-go/fs-go -addr 0.0.0.0:8081 -dir .
 
 
+# xyplorer
+! D:\opt\fs-go\fs-go.exe -port 88 -dir  "<curpath>"
 ```
 ```
 
 
 Only two parameters are needed:
 Only two parameters are needed:

+ 35 - 26
main.go

@@ -9,7 +9,6 @@ import (
 	"net/http"
 	"net/http"
 	"os/exec"
 	"os/exec"
 	"strconv"
 	"strconv"
-	"strings"
 )
 )
 
 
 var port int
 var port int
@@ -27,23 +26,24 @@ func main() {
 	fs := http.FileServer(http.Dir(dir))
 	fs := http.FileServer(http.Dir(dir))
 	log.Printf("server is start %v: %v", port, dir)
 	log.Printf("server is start %v: %v", port, dir)
 	//check port
 	//check port
-	for i := 0; i < 5; i++ {
-		res := checkAvailablePort(port)
-		if res == true {
-			break
-		} else {
-			log.Println(strconv.Itoa(port) + " is not available.")
-			//log.Printf("server error on port %v: %v", port, err)
-			port = port + 1
-		}
-	}
+	// for i := 0; i < 5; i++ {
+	// 	if checkAvailablePort(port) {
+	// 		break
+	// 	} else {
+	// 		// log.Println(strconv.Itoa(port) + " is not available.")
+	// 		log.Printf("server error on port %v: %v", port, err)
+	// 		port++
+	// 	}
+	// }
 
 
 	// Start the file server.
 	// Start the file server.
-	err := http.ListenAndServe(":"+fmt.Sprintf("%d", port), fs)
+	err := http.ListenAndServe(":"+fmt.Sprintf("%d", port), http.HandlerFunc(handler))
 	if err != nil {
 	if err != nil {
 		log.Fatal("server error on port %v: %v", port, err)
 		log.Fatal("server error on port %v: %v", port, err)
 
 
 	}
 	}
+	log.Printf("Server started on port %d\n", port)
+	
 	// open browser
 	// open browser
 	l, err := net.Listen("tcp", "localhost:"+strconv.Itoa(port))
 	l, err := net.Listen("tcp", "localhost:"+strconv.Itoa(port))
 	if err != nil {
 	if err != nil {
@@ -56,20 +56,29 @@ func main() {
 	log.Fatal(http.Serve(l, fs))
 	log.Fatal(http.Serve(l, fs))
 }
 }
 
 
+// remove header cache
+func handler(w http.ResponseWriter, r *http.Request) {
+    w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
+    w.Header().Set("Pragma", "no-cache") // HTTP 1.0.
+    w.Header().Set("Expires", "0") // Proxies.
+    
+	if r.URL.Path == "/favicon.ico" {
+		return
+	}
+	http.StripPrefix("/", http.FileServer(http.Dir(dir))).ServeHTTP(w, r)
+}
+
 //checkAvailablePort 端口可用检测,netstat 只适合linux
 //checkAvailablePort 端口可用检测,netstat 只适合linux
 func checkAvailablePort(port int) (res bool) {
 func checkAvailablePort(port int) (res bool) {
-	checkStatement := fmt.Sprintf(`netstat -anp | grep -q %d ; echo $?`, port)
-	output, err := exec.Command("sh", "-c", checkStatement).CombinedOutput()
-	if err != nil {
-		return false
-	}
-	// log.println(output, string(output)) ==> [48 10] 0 或 [49 10] 1
-	result, err := strconv.Atoi(strings.TrimSuffix(string(output), "\n"))
-	if err != nil {
-		return false
-	}
-	if result == 0 {
-		return false
-	}
-	return true
+    checkStatement := fmt.Sprintf(`lsof -i:%d -t`, port)
+    output, err := exec.Command("sh", "-c", checkStatement).Output()
+    if err != nil {
+        return false
+    }
+
+    if len(output) > 0 {
+        return false
+    }
+
+    return true
 }
 }