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(bucketID, objectName, "restful方式", fmt.Sprintf(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) }