Browse Source

文件上传程序

tangs 6 years ago
parent
commit
3e2d0b3d64
7 changed files with 160 additions and 0 deletions
  1. 4 0
      config.json
  2. 7 0
      log/log.log
  3. 82 0
      src/fs/fs.go
  4. 7 0
      src/fs/router.go
  5. 1 0
      src/github.com/Tangmz/tangs
  6. 46 0
      src/main.go
  7. 13 0
      www/index.html

+ 4 - 0
config.json

@@ -0,0 +1,4 @@
+{
+    "filePath": "file",
+    "log": "log/log.log"
+}

+ 7 - 0
log/log.log

@@ -0,0 +1,7 @@
+2017/07/22 01:03:15 main.go:42: [D] main start listen on port :5678
+2017/07/22 01:03:38 fs.go:51: [E] FileUploadHandle check folder path(file) error ->(stat file: no such file or directory)
+2017/07/22 01:03:38 fs.go:65: [E] FileUploadHandle create file (file/background.jpg-2017July221338) error ->(open file/background.jpg-2017July221338: no such file or directory)
+2017/07/22 01:04:32 main.go:42: [D] main start listen on port :5678
+2017/07/22 01:04:44 fs.go:51: [E] FileUploadHandle check folder path(file) error ->(stat file: no such file or directory)
+2017/07/22 01:04:44 fs.go:79: [D] FileUploadHandle copy file (file/background.jpg-2017July221444) success with length(135595)
+2017/07/22 01:05:00 fs.go:79: [D] FileUploadHandle copy file (file/u=3814061243,513665692&fm=23&gp=0.jpg-2017July22150) success with length(22129)

+ 82 - 0
src/fs/fs.go

@@ -0,0 +1,82 @@
+package fs
+
+import (
+	"github.com/Tangmz/tangs/log"
+	"net/http"
+	"time"
+	"fmt"
+	"os"
+	"io"
+	"encoding/json"
+)
+
+type Config struct {
+	FilePath string `json:"filePath"`
+	Log string `json:"log"`
+}
+
+var Conf = &Config{}
+
+func FileUploadHandle(w http.ResponseWriter, r *http.Request) {
+	var code int
+	var msg string
+	defer func() {
+		resp := map[string]interface{}{
+			"code": code,
+			"msg": msg,
+		}
+		bys, _ := json.Marshal(resp)
+		w.Write(bys)
+	}()
+	file, fileHeader, err := r.FormFile("file")
+	if err != nil {
+		log.Error("FileUploadHandle received file error ->(%v)", err)
+		code = 1
+		msg = err.Error()
+		return
+	}
+	defer file.Close()
+
+	originFilename := fileHeader.Filename
+	now := time.Now()
+	timePoint := fmt.Sprintf("%v%v%v%v%v%v", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
+	var filename string = originFilename + "-" + timePoint
+
+	// check file path
+
+	fmt.Println(os.Getwd())
+	fp := Conf.FilePath
+	_, err = os.Stat(fp)
+	if err != nil {
+		log.Error("FileUploadHandle check folder path(%v) error ->(%v)", fp, err)
+		err = os.MkdirAll(fp, os.ModePerm)
+		if err != nil {
+			log.Error("FileUploadHandle mkdir folder path(%v) error ->(%v)", fp, err)
+			code = 2
+			msg = err.Error()
+			return
+
+		}
+	}
+
+	filename = fp + "/" +filename
+	f, err := os.Create(filename)
+	if err != nil {
+		log.Error("FileUploadHandle create file (%v) error ->(%v)", filename, err)
+		code = 3
+		msg = err.Error()
+		return
+	}
+	defer f.Close()
+	length, err := io.Copy(f, file)
+	if err != nil {
+		log.Error("FileUploadHandle copy file (%v) error ->(%v)", filename, err)
+		code = 4
+		msg = err.Error()
+		return
+	}
+
+	log.Debug("FileUploadHandle copy file (%v) success with length(%v)", filename, length)
+	code = 0
+	msg = "Ok"
+}

+ 7 - 0
src/fs/router.go

@@ -0,0 +1,7 @@
+package fs
+
+import "net/http"
+
+func Router() {
+	http.HandleFunc("/uploadFile", FileUploadHandle)
+}

+ 1 - 0
src/github.com/Tangmz/tangs

@@ -0,0 +1 @@
+Subproject commit 045349c71386dc886c6728f82f4ba5cbef4bde37

+ 46 - 0
src/main.go

@@ -0,0 +1,46 @@
+package main
+
+import (
+	"net/http"
+	"fmt"
+	"io/ioutil"
+	"encoding/json"
+	"fs"
+	"github.com/Tangmz/tangs/log"
+	"time"
+)
+
+func main() {
+	defer func() {
+		time.Sleep(5*time.Second)
+	}()
+	var conf string = "config.json"
+	var err error
+
+	configBys, err := ioutil.ReadFile(conf)
+	if err != nil {
+		log.Error("main read config with conf(%v) error ->(%v)", conf, err)
+		return
+	}
+
+	log.Debug("%v", string(configBys))
+
+	var config = &fs.Config{}
+
+	err = json.Unmarshal(configBys, &config)
+	if err != nil {
+		log.Error("main trans config(%v) to map error ->(%v)", string(configBys), err)
+		return
+	}
+
+	log.RedirectFile(config.Log)
+
+	fs.Conf = config
+
+	// 初始化router
+	fs.Router()
+	log.Debug("main start listen on port :5678")
+
+	http.Handle("/", http.FileServer(http.Dir("www")))
+	fmt.Println(http.ListenAndServe(":5678", nil))
+}

+ 13 - 0
www/index.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>上传文件</title>
+</head>
+<body>
+<form action="/uploadFile" method="POST" enctype="multipart/form-data">
+    <input type="file" name="file">
+    <input type="submit" name="开始上传">
+</form>
+</body>
+</html>