http.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package oss
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "net/http"
  7. "strings"
  8. "app.yhyue.com/moapp/jybase/api"
  9. . "app.yhyue.com/moapp/jybase/common"
  10. "jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
  11. "jygit.jydev.jianyu360.cn/BaseService/ossService/util"
  12. )
  13. /* restful方式上传
  14. * @param bucket_id 桶id
  15. * @param object_name 对象名称
  16. * @param text 文本内容
  17. * @param file 附件
  18. * @param gzip 是否压缩,true or false
  19. * @return {"error_code":0,"error_msg":"上传成功"}
  20. */
  21. func UploadHandler(w http.ResponseWriter, r *http.Request) {
  22. if !api.R.CheckReqParam(w, r, "bucket_id", "object_name") {
  23. return
  24. }
  25. bucketID := r.FormValue("bucket_id")
  26. objectName := r.FormValue("object_name")
  27. gzipFlag := r.FormValue("gzip")
  28. log.Println(GetIp(r), "restful方式上传文件", bucketID, objectName, gzipFlag)
  29. text := strings.TrimSpace(r.FormValue("text"))
  30. gzipEnabled := gzipFlag == "" || gzipFlag == "true"
  31. var reader io.Reader
  32. file, _, err := r.FormFile("file")
  33. status, message := func() (int, string) {
  34. if err != nil {
  35. if text == "" {
  36. return api.Error_code_1002, api.Error_msg_1002 + ",file和text必须传一个"
  37. } else {
  38. reader = strings.NewReader(text)
  39. }
  40. } else {
  41. reader = file
  42. defer file.Close()
  43. }
  44. err = UploadAttachment(bucketID, objectName, reader, gzipEnabled)
  45. if err != nil {
  46. return -1, fmt.Sprintf(constant.UploadFail, err)
  47. }
  48. return 0, constant.UploadSuccess
  49. }()
  50. api.R.ServeJson(w, r, &api.Result{Error_code: status, Error_msg: message})
  51. }
  52. /* restful方式下载
  53. * @param bucket_id 桶id
  54. * @param object_name 对象名称
  55. * @return 文件内容
  56. */
  57. func DownloadHandler(w http.ResponseWriter, r *http.Request) {
  58. bucketID := r.FormValue("bucket_id")
  59. if bucketID == "" {
  60. http.Error(w, api.Error_msg_1002+"bucket_id", http.StatusInternalServerError)
  61. return
  62. }
  63. objectName := r.FormValue("object_name")
  64. if objectName == "" {
  65. http.Error(w, api.Error_msg_1002+"object_name", http.StatusInternalServerError)
  66. return
  67. }
  68. log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName)
  69. data, err := DownloadAttachment(bucketID, objectName)
  70. if err != nil {
  71. log.Println(constant.DownloadFail, err)
  72. http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError)
  73. return
  74. }
  75. w.Write(data)
  76. }
  77. /* restful方式删除
  78. * @param bucket_id 桶id
  79. * @param object_name 对象名称
  80. * @return {"error_code":0,"error_msg":"删除成功"}
  81. */
  82. func DeleteHandler(w http.ResponseWriter, r *http.Request) {
  83. if !api.R.CheckReqParam(w, r, "bucket_id", "object_name") {
  84. return
  85. }
  86. bucketID := r.FormValue("bucket_id")
  87. objectName := r.FormValue("object_name")
  88. log.Println(GetIp(r), "restful方式删除文件", bucketID, objectName)
  89. status, message := func() (int, string) {
  90. err := DeleteAttachment(bucketID, objectName)
  91. if err != nil {
  92. return -1, fmt.Sprintf(constant.DeleteFail, err)
  93. }
  94. return 1, constant.DeleteSuccess
  95. }()
  96. api.R.ServeJson(w, r, &api.Result{Error_code: status, Error_msg: message})
  97. }
  98. // NodesHandler 接口用于查看当前在线节点信息(依赖heartbeat中redis心跳)
  99. func NodesHandler(w http.ResponseWriter, r *http.Request) {
  100. nodes, err := util.GetOnlineNodesJSON() // 此函数在 heartbeat 模块中实现
  101. if err != nil {
  102. log.Println("Fetch nodes failed: %v", err)
  103. http.Error(w, "Fetch nodes failed: "+err.Error(), http.StatusInternalServerError)
  104. return
  105. }
  106. w.Header().Set("Content-Type", "application/json")
  107. w.Write(nodes)
  108. }
  109. /* 根据标讯id获取正文
  110. * @param bucket_id 桶id
  111. * @param object_name 对象名称
  112. * @return 标讯正文内容
  113. */
  114. func BidDetailHandler(w http.ResponseWriter, r *http.Request) {
  115. bucketID := r.FormValue("bucket_id")
  116. if bucketID == "" {
  117. http.Error(w, api.Error_msg_1002+"bucket_id", http.StatusInternalServerError)
  118. return
  119. }
  120. objectName := r.FormValue("object_name")
  121. if objectName == "" {
  122. http.Error(w, api.Error_msg_1002+"object_name", http.StatusInternalServerError)
  123. return
  124. }
  125. objectName += ".txt"
  126. log.Println(GetIp(r), "根据标讯id获取正文", bucketID, objectName)
  127. w.Write(GetBidDetail(bucketID, objectName))
  128. }