App.go
package main import ( "./zip" "flag" "fmt" "io" "log" "net/http" "os" ) var ( dir = flag.String("d", "./temp/", "location dir") addr = flag.String("b", "0.0.0.0:8090", "http listen port") ) func main() { flag.Parse() log.Println("绑定" + *addr) log.Println("存储地址" + *dir) http.HandleFunc("/upload", upload) http.ListenAndServe(*addr, nil) } func upload(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { fmt.Fprintln(w, "滚") return } err := r.ParseMultipartForm(1024 * 1024 * 100) if err != nil { fmt.Fprintln(w, err) return } file, handler, err := r.FormFile("uploadfile") defer file.Close() if err != nil { fmt.Fprintln(w, err) return } os.Mkdir(*dir, 0777) log.Println(handler.Filename) f, err := os.OpenFile(*dir+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) defer f.Close() if err != nil { fmt.Fprintln(w, err) return } io.Copy(f, file) err = ziputil.DeCompress(f.Name(), *dir) if err != nil { fmt.Fprintln(w, err) return } os.Remove(f.Name()) fmt.Fprintln(w, "upload ok!") }
zip/ziputil.go
package ziputil import ( "os" "io" "strings" "archive/zip" "log" ) func DeCompress(tarFile, dest string) error { if strings.HasSuffix(tarFile,".zip"){ return zipDeCompress(tarFile,dest) } return nil } func zipDeCompress(zipFile, dest string) error { or ,err := zip.OpenReader(zipFile); defer or.Close() if err!=nil {return err} log.Print(" 压缩文件",zipFile," 解压到",dest ) for _,item := range or.File { log.Print(dest+item.Name) if item.FileInfo().IsDir(){os.Mkdir(dest+item.Name,0777);continue} rc, _ := item.Open() dst,_ := createFile(dest+item.Name); _,err :=io.Copy(dst,rc) if err!=nil { log.Print(err) } } return nil } func createFile(name string) (*os.File, error) { err := os.MkdirAll(string([]rune(name)[0:strings.LastIndex(name, "/")]), 0755) if err != nil { return nil, err } return os.Create(name) }