Golang SimpleHTTPServer

//package simpleHTTPServer
package main

import (
    "net/http"
    "os/exec"
    "fmt"
    "strings"
    "io/ioutil"
)

type fileServer struct {

}

func (f *fileServer) ServeHTTP(w http.ResponseWriter ,r *http.Request){

    requestPath := "."+r.URL.Path
    fmt.Printf("Get request%v\n",requestPath)
    getTypeCmd :=  exec.Command("file",requestPath)
    fileType,err := getTypeCmd.Output()

    if err !=nil {
        w.Write([]byte(fmt.Sprintf("Get %s error: %v",requestPath,err)))
    }

    if  strings.Contains(string(fileType[:]),"directory") {
        cmd := exec.Command("ls",requestPath)
        fileListData ,err := cmd.Output()
        //if err :=cmd.Run();err !=nil{
        //   fmt.Printf("Execute ls error:%v\n",err)
        //}
        if err !=nil{
            fmt.Printf("Get output of cmd ls error %v\n",err)
        }
        fileList := strings.Split(string(fileListData[:]),"\n")
        //w.Write(fileListData)
        fileListLink := GenLinkForFile(r.URL.Path,fileList)
        //fmt.Print(fileList)
        w.Write([]byte(fileListLink))
    } else {
        fileData,err := ioutil.ReadFile(requestPath)
        if err!=nil {
            w.Write([]byte(fmt.Sprintf("Get file %s error: %v",requestPath,err)))
        }
        w.Write(fileData)
    }
}

func GenLinkForFile(basePath string,fileList []string) string {
    var fileListLink string = `
Directory listing for `</span>+basePath+<span class="hljs-string">`

Directory listing for `+basePath+`



`
return fileListLink } func SimpleServer(){ http.Handle("/",&fileServer{}) err := http.ListenAndServe(":8000",nil) if err != nil { fmt.Printf("Listen 8000 error:%v\n",err) } } func main () { SimpleServer() }

你可能感兴趣的:(golang,golang,net-http)