2
0

api_file_upload_post.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package route
  2. import (
  3. "database/sql"
  4. "encoding/base64"
  5. "errors"
  6. "io"
  7. "opennamu/route/tool"
  8. "os"
  9. "path/filepath"
  10. "strings"
  11. )
  12. func Api_file_upload_make_document(db *sql.DB) {
  13. }
  14. func Api_file_upload_post(config tool.Config) string {
  15. db := tool.DB_connect()
  16. defer tool.DB_close(db)
  17. other_set := map[string]string{}
  18. json.Unmarshal([]byte(config.Other_set), &other_set)
  19. file_name := strings.TrimSpace(other_set["file_name"])
  20. file_data := strings.TrimSpace(other_set["file_data"])
  21. file_ext := strings.TrimSpace(other_set["file_ext"])
  22. file_ext = strings.TrimPrefix(strings.ToLower(file_ext), ".")
  23. allowed_ext := tool.Get_ext_allow_list(db)
  24. // file_max_size := tool.Get_file_max_size(db)
  25. return_value := make(map[string]string)
  26. if file_data == "" || file_name == "" || file_ext == "" {
  27. return_value["response"] = "error"
  28. return_value["data"] = "invalid data"
  29. json_data, _ := json.Marshal(return_value)
  30. return string(json_data)
  31. } else if _, ok := allowed_ext[file_ext]; !ok {
  32. return_value["response"] = "error"
  33. return_value["data"] = "unallowed ext"
  34. json_data, _ := json.Marshal(return_value)
  35. return string(json_data)
  36. } else if tool.Get_file_name_unallow_check(db, file_name) {
  37. return_value["response"] = "error"
  38. return_value["data"] = "unallowed file name"
  39. json_data, _ := json.Marshal(return_value)
  40. return string(json_data)
  41. }
  42. main_dir := tool.Get_file_main_dir(db)
  43. if err := os.MkdirAll(main_dir, 0o755); err != nil {
  44. return_value["response"] = "error"
  45. return_value["data"] = "directory create fail"
  46. json_data, _ := json.Marshal(return_value)
  47. return string(json_data)
  48. }
  49. file_full_dir := tool.File_name_to_dir(file_name, file_ext)
  50. dst_path := filepath.Join(main_dir, file_full_dir)
  51. if _, err := os.Stat(dst_path); err == nil {
  52. return_value["response"] = "error"
  53. return_value["data"] = "already exist"
  54. json_data, _ := json.Marshal(return_value)
  55. return string(json_data)
  56. } else if !errors.Is(err, os.ErrNotExist) {
  57. return_value["response"] = "error"
  58. return_value["data"] = "exist check fail"
  59. json_data, _ := json.Marshal(return_value)
  60. return string(json_data)
  61. }
  62. out, err := os.Create(dst_path)
  63. if err != nil {
  64. return_value["response"] = "error"
  65. return_value["data"] = "file create fail"
  66. json_data, _ := json.Marshal(return_value)
  67. return string(json_data)
  68. }
  69. defer out.Close()
  70. if _, err := io.Copy(out, base64.NewDecoder(base64.StdEncoding, strings.NewReader(file_data))); err != nil {
  71. _ = out.Close()
  72. _ = os.Remove(dst_path)
  73. return_value["response"] = "error"
  74. return_value["data"] = "file write fail"
  75. json_data, _ := json.Marshal(return_value)
  76. return string(json_data)
  77. }
  78. return_value["response"] = "ok"
  79. json_data, _ := json.Marshal(return_value)
  80. return string(json_data)
  81. }