go web

阅读更多
package main
import (
"io"
"io/ioutil"
"log"
"os"
"net/http"
)

const (
UPLOAD_DIR = "uploads"
)
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
io.WriteString(w, "
" enctype=\"multipart/form-data\">"+
"Choose an image to upload: "+
""+
"
")
return
}

if r.Method == "POST" {
f, h, err := r.FormFile("image")
if err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
filename := h.Filename
defer f.Close()
t, err := os.Create(UPLOAD_DIR + "/" + filename)
if err != nil {
log.Println("create dir has error");

http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
defer t.Close()
if _, err := io.Copy(t, f); err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
http.Redirect(w, r, "/view?id="+filename,
http.StatusFound)
}
}

func viewHandler(w http.ResponseWriter, r *http.Request) {
imageId := r.FormValue("id")
imagePath := UPLOAD_DIR + "/" + imageId
if exists := isExists(imagePath);!exists {
http.NotFound(w, r)
return
}
w.Header().Set("Content-Type", "image")
http.ServeFile(w, r, imagePath)

}

func isExists(path string) bool {
_, err := os.Stat(path)
if err == nil {
return true
}
return os.IsExist(err)
}


func listHandler(w http.ResponseWriter, r *http.Request) {
fileInfoArr, err := ioutil.ReadDir("uploads")
if err != nil {
http.Error(w, err.Error(),
http.StatusInternalServerError)
return
}
var listHtml string

for _, fileInfo := range fileInfoArr {
imgid := fileInfo.Name()
listHtml += "
  • imgid
  • "
    }
    io.WriteString(w, "
      "+listHtml+"
    ")
    }


    func main() {
    http.HandleFunc("/", listHandler)

    http.HandleFunc("/upload", uploadHandler)
    http.HandleFunc("/view", viewHandler)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
    log.Fatal("ListenAndServe: ", err.Error())
    }
    }

    你可能感兴趣的:(go)