golang http uploads the zip file and automatically extracts it to the directory

 

 

 

App.go

 


package main

import (
	"./zip"
	"flag"
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
)

where (
	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("Bind" + *addr)
	log.Println("Storage address" + *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("compressed file",zipFile,"extracted to",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)
}

 

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326758349&siteId=291194637
Recommended