123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- package oss
- import (
- "encoding/json"
- "fmt"
- "github.com/gogf/gf/v2/os/gctx"
- "github.com/gogf/gf/v2/util/gconv"
- "io"
- "log"
- "net/http"
- "strings"
- "app.yhyue.com/moapp/jybase/api"
- . "app.yhyue.com/moapp/jybase/common"
- "jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
- "jygit.jydev.jianyu360.cn/BaseService/ossService/util"
- )
- /* restful方式上传
- * @param bucket_id 桶id
- * @param object_name 对象名称
- * @param text 文本内容
- * @param file 附件
- * @param gzip 是否压缩,true or false
- * @return {"error_code":0,"error_msg":"上传成功"}
- */
- func UploadHandler(w http.ResponseWriter, r *http.Request) {
- if !api.R.CheckReqParam(w, r, "bucket_id", "object_name") {
- return
- }
- bucketID := r.FormValue("bucket_id")
- objectName := r.FormValue("object_name")
- gzipFlag := r.FormValue("gzip")
- log.Println(GetIp(r), "restful方式上传文件", bucketID, objectName, gzipFlag)
- text := strings.TrimSpace(r.FormValue("text"))
- var reader io.Reader
- file, _, err := r.FormFile("file")
- status, message := func() (int, string) {
- if err != nil {
- if text == "" {
- return api.Error_code_1002, api.Error_msg_1002 + ",file和text必须传一个"
- } else {
- reader = strings.NewReader(text)
- }
- } else {
- reader = file
- defer file.Close()
- }
- err = Upload(bucketID, objectName, reader, gzipFlag == "true")
- if err != nil {
- return -1, fmt.Sprintf(constant.UploadFail, err)
- }
- return 0, constant.UploadSuccess
- }()
- api.R.ServeJson(w, r, &api.Result{Error_code: status, Error_msg: message})
- }
- /* restful方式下载
- * @param bucket_id 桶id
- * @param object_name 对象名称
- * @return 文件内容
- */
- func DownloadHandler(w http.ResponseWriter, r *http.Request) {
- bucketID := r.FormValue("bucket_id")
- if bucketID == "" {
- http.Error(w, api.Error_msg_1002+"bucket_id", http.StatusInternalServerError)
- return
- }
- objectName := r.FormValue("object_name")
- if objectName == "" {
- http.Error(w, api.Error_msg_1002+"object_name", http.StatusInternalServerError)
- return
- }
- autoExtract := 0
- if gconv.Bool(r.FormValue("extract")) {
- autoExtract = 1
- }
- log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName, autoExtract)
- if err := Download(w, autoExtract, bucketID, objectName); err != nil {
- log.Println(constant.DownloadFail, err)
- http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError)
- return
- }
- }
- /* restful方式删除
- * @param bucket_id 桶id
- * @param object_name 对象名称
- * @return {"error_code":0,"error_msg":"删除成功"}
- */
- func DeleteHandler(w http.ResponseWriter, r *http.Request) {
- if !api.R.CheckReqParam(w, r, "bucket_id", "object_name") {
- return
- }
- bucketID := r.FormValue("bucket_id")
- objectName := r.FormValue("object_name")
- log.Println(GetIp(r), "restful方式删除文件", bucketID, objectName)
- status, message := func() (int, string) {
- err := Delete(bucketID, objectName)
- if err != nil {
- return -1, fmt.Sprintf(constant.DeleteFail, err)
- }
- return 1, constant.DeleteSuccess
- }()
- api.R.ServeJson(w, r, &api.Result{Error_code: status, Error_msg: message})
- }
- // NodesHandler 接口用于查看当前在线节点信息(依赖heartbeat中redis心跳)
- func NodesHandler(w http.ResponseWriter, r *http.Request) {
- nodes, err := util.GetOnlineNodes(gctx.New()) // 此函数在 heartbeat 模块中实现
- var b []byte
- if err == nil {
- b, err = json.Marshal(nodes)
- }
- if err != nil {
- log.Println("Fetch nodes failed: %v", err)
- http.Error(w, "Fetch nodes failed: "+err.Error(), http.StatusInternalServerError)
- return
- }
- w.Header().Set("Content-Type", "application/json")
- w.Write(b)
- }
- /* 根据标讯id获取正文
- * @param bucket_id 桶id
- * @param object_name 对象名称
- * @return 标讯正文内容
- */
- func BidDetailHandler(w http.ResponseWriter, r *http.Request) {
- bucketID := r.FormValue("bucket_id")
- if bucketID == "" {
- http.Error(w, api.Error_msg_1002+"bucket_id", http.StatusInternalServerError)
- return
- }
- objectName := r.FormValue("object_name")
- if objectName == "" {
- http.Error(w, api.Error_msg_1002+"object_name", http.StatusInternalServerError)
- return
- }
- log.Println(GetIp(r), "根据标讯id获取正文", bucketID, objectName)
- GetBidDetail(w, bucketID, objectName)
- }
|