fs.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package fs
  2. import (
  3. "github.com/Tangmz/tangs/log"
  4. "net/http"
  5. "time"
  6. "fmt"
  7. "os"
  8. "io"
  9. "encoding/json"
  10. "os/exec"
  11. "strings"
  12. "path/filepath"
  13. )
  14. type Config struct {
  15. FilePath string `json:"filePath"`
  16. DeletePath string `json:"deletePath"`
  17. Log string `json:"log"`
  18. Addr string `json:"addr"`
  19. }
  20. var Conf = &Config{}
  21. func FileUploadHandle(w http.ResponseWriter, r *http.Request) {
  22. var code int
  23. var msg string
  24. var filename string
  25. defer func() {
  26. resp := map[string]interface{}{
  27. "code": code,
  28. "msg": msg,
  29. "url": Conf.Addr + filename,
  30. }
  31. bys, _ := json.Marshal(resp)
  32. w.Write(bys)
  33. }()
  34. file, fileHeader, err := r.FormFile("file")
  35. if err != nil {
  36. log.Error("FileUploadHandle received file error ->(%v)", err)
  37. code = 1
  38. msg = err.Error()
  39. return
  40. }
  41. defer file.Close()
  42. originFilename := fileHeader.Filename
  43. now := time.Now()
  44. timePoint := fmt.Sprintf("%v-%v-%v-%v-%v-%v", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
  45. filename = timePoint + "-" + originFilename
  46. // check file path
  47. fmt.Println(os.Getwd())
  48. fp := Conf.FilePath
  49. _, err = os.Stat(fp)
  50. if err != nil {
  51. log.Error("FileUploadHandle check folder path(%v) error ->(%v)", fp, err)
  52. err = os.MkdirAll(fp, os.ModePerm)
  53. if err != nil {
  54. log.Error("FileUploadHandle mkdir folder path(%v) error ->(%v)", fp, err)
  55. code = 2
  56. msg = err.Error()
  57. return
  58. }
  59. }
  60. filename = filepath.Join(fp,filename)
  61. f, err := os.Create(filename)
  62. if err != nil {
  63. log.Error("FileUploadHandle create file (%v) error ->(%v)", filename, err)
  64. code = 3
  65. msg = err.Error()
  66. return
  67. }
  68. defer f.Close()
  69. length, err := io.Copy(f, file)
  70. if err != nil {
  71. log.Error("FileUploadHandle copy file (%v) error ->(%v)", filename, err)
  72. code = 4
  73. msg = err.Error()
  74. return
  75. }
  76. log.Debug("FileUploadHandle copy file (%v) success with length(%v)", filename, length)
  77. code = 0
  78. msg = "Ok"
  79. }
  80. func DeleteFile(w http.ResponseWriter, r *http.Request) {
  81. var name = r.FormValue("name")
  82. if len(name) < 1 {
  83. w.WriteHeader(404)
  84. w.Write([]byte("name is empty"))
  85. log.Error("DeleteFile name is empty")
  86. return
  87. }
  88. var deleteFile= Conf.DeletePath
  89. if !strings.HasSuffix(deleteFile, "/") {
  90. deleteFile += "/"
  91. }
  92. cmd := exec.Command("mv", name, Conf.DeletePath)
  93. output,err :=cmd.CombinedOutput()
  94. if err != nil {
  95. w.Write([]byte(err.Error()))
  96. log.Error("DeleteFile command with name: %v, output: %v error: %v", name, deleteFile, err)
  97. return
  98. }
  99. log.Debug("DeleteFile command with name: %v, output: %v success with output: %v", name, deleteFile, string(output))
  100. w.Write([]byte("Success"))
  101. return
  102. }