Golan http静态服务器

main.go

package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	config := readConfig()
	log.Println("start")
	http.Handle("/", http.FileServer(http.Dir(config.Wwwroot)))
	http.Handle("/download/", http.StripPrefix("/download/", http.FileServer(http.Dir(config.Downloadpath))))
	http.HandleFunc("/upload", upload)
	http.HandleFunc("/upload2", upload2)

	http.ListenAndServe(":"+config.Port, nil)
}

type Sizer interface {
	Size() int64
}

func upload(writer http.ResponseWriter, r *http.Request) {
	file, fileheader, _ := r.FormFile("file_1")
	defer file.Close()
	config := readConfig()
	newfile, _ := os.Create(config.Uploadpath + fileheader.Filename)
	defer newfile.Close()
	io.Copy(newfile, file)
	fmt.Fprintf(writer, "上传文件的大小为: %d", file.(Sizer).Size())
}

func upload2(writer http.ResponseWriter, r *http.Request) {
	log.Println("upload2 started.")
	file, fileheader, _ := r.FormFile("file")
	defer file.Close()
	config := readConfig()

	str_time := strings.Replace(fileheader.Filename, "IMG_", "", -1)
	str_time = strings.Replace(str_time, "VID_", "", -1)
	var folder string
	t, error := time.Parse("20060102", str_time[0:8])

	if error == nil {
		folder = config.PhotoPath + strconv.Itoa(t.Year()) + "/" +
			strconv.Itoa(int(t.Month())) + "月/" + strconv.Itoa(t.Day()) + "日/"
		//folder := config.PhotoPath + str_time[0:4] + "/" + str_time[4:6] + "月/" + str_time[6:8] + "日/"
	} else {
		folder = config.Uploadpath
	}
	os.MkdirAll(folder, os.ModeDir)
	log.Println(folder + fileheader.Filename)

	newfile, _ := os.Create(folder + fileheader.Filename)
	defer newfile.Close()
	_, error2 := io.Copy(newfile, file)
	if error2 == nil {
		fmt.Fprintf(writer, "%s", fileheader.Filename)
		return
	}

	log.Println("error: " + error2.Error())
	fmt.Fprintf(writer, "error: %s", error2.Error())
}

 

myConfig.go

package main

import (
	"encoding/json"
	"io/ioutil"
	"log"
)

//定义结构体
//首字母大写 , json:"msg_id" 是 tag
type MyConfig struct {
	Wwwroot      string `json:"wwwroot"`
	Uploadpath   string `json:"uploadpath"`
	Downloadpath string `json:"downloadpath"`
	PhotoPath    string `json:"photopath"`
	Port         string `json:"port"`
}

func readConfig() MyConfig {
	var config MyConfig
	filename := `./aa.json`
	bytes, _ := ioutil.ReadFile(filename)
	err := json.Unmarshal(bytes, &config)
	if err != nil {
		log.Fatal(err)
	}
	//log.Println(config.Wwwroot)
	return config
}

  

serialize.go

package main

import (
	"encoding/json"
	"fmt"
)

//定义结构体
//首字母大写 , json:"msg_id" 是 tag
type Message struct {
	MsgId   string `json:"msg_id"`
	Content string `json:"content"`
}

//json 序列号反序列化
func T3_1() {
	msg := Message{"msgid_001", "contente2222222222"}
	str, err := json.Marshal(msg)
	//输出 {"msg_id":"msgid_001","content":"contente2222222222"}
	fmt.Println(string(str), err)

	var msg1 Message
	//  str := `{"changes": [{"armid":3,"Index":5}, {"armid":3,"Index":6}]}`
	//反序列化为 stuct
	err = json.Unmarshal(str, &msg1)
	//输出 {msgid_001 contente2222222222}
	fmt.Println(msg1)
	//反序列化为map
	var msg2 map[string]string
	err = json.Unmarshal(str, &msg2)
	//输出 map[msg_id:msgid_001 content:contente2222222222]
	fmt.Println(msg2)
}

  

aa.json

{
"wwwroot":"./wwwroot/",
"uploadpath":"./up/",
"downloadpath":"./down/",
"photopath":"./Record/",
"port":"80"
}

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。