file.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "os"
  6. "path"
  7. "regexp"
  8. "sparrow/pkg/server"
  9. "sparrow/pkg/utils"
  10. "strconv"
  11. "time"
  12. "github.com/kataras/iris"
  13. )
  14. func registerRouter(app *iris.Application, fc *FileAccess) {
  15. app.Post("/upload_file", iris.LimitRequestBodySize(int64(*conMaxSize)),
  16. func(ctx iris.Context) {
  17. file, info, err := ctx.FormFile("file")
  18. if err != nil {
  19. server.Log.Error(err)
  20. ctx.JSON(map[string]interface{}{
  21. "code": -1,
  22. "message": "文件大小超过限制(" + strconv.Itoa(*conMaxSize) + "字节)",
  23. })
  24. return
  25. }
  26. defer file.Close()
  27. fname := info.Filename
  28. fileSuffix := path.Ext(fname)
  29. re := regexp.MustCompile(*conAllowExt)
  30. if !re.MatchString(fileSuffix) {
  31. server.Log.Errorf("%s", "非法的文件格式"+fileSuffix)
  32. ctx.JSON(map[string]interface{}{
  33. "code": -2,
  34. "message": "非法的文件格式",
  35. })
  36. return
  37. }
  38. newname := fmt.Sprintf("%s%s", utils.UUID(), fileSuffix)
  39. newfile := "./upload/tmp/" + newname
  40. utils.CreateIfNotExist(newfile)
  41. out, err := os.OpenFile(newfile,
  42. os.O_WRONLY|os.O_CREATE, 0666)
  43. if err != nil {
  44. ctx.JSON(map[string]interface{}{
  45. "code": -3,
  46. "message": "文件上传失败:" + err.Error(),
  47. })
  48. return
  49. }
  50. defer out.Close()
  51. io.Copy(out, file)
  52. var fileURL string
  53. if *conDomain == "" {
  54. fileURL = "http://" + server.GetHTTPHost() + "/upload/tmp/" + newname
  55. } else {
  56. fileURL = "http://" + *conDomain + "/upload/tmp/" + newname
  57. }
  58. fc.mu.Lock()
  59. fc.tempFiles[newname] = &tempFile{
  60. fileName: newfile,
  61. createTime: time.Now(),
  62. }
  63. fc.mu.Unlock()
  64. ctx.JSON(map[string]interface{}{
  65. "code": 0,
  66. "message": "success",
  67. "file": fileURL,
  68. })
  69. return
  70. })
  71. }