package oss import ( "app.yhyue.com/moapp/jybase/api" . "app.yhyue.com/moapp/jybase/common" "fmt" "io" "jygit.jydev.jianyu360.cn/BaseService/ossService/constant" "jygit.jydev.jianyu360.cn/BaseService/ossService/util" "log" "net/http" "strings" ) /* 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")) gzipEnabled := gzipFlag == "" || gzipFlag == "true" 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 = UploadAttachment(bucketID, objectName, reader, gzipEnabled) 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 } log.Println(GetIp(r), "restful方式上传文件", bucketID, objectName) data, err := DownloadAttachment(bucketID, objectName) if err != nil { log.Println(constant.DownloadFail, err) http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError) return } w.Write(data) } /* 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 := DeleteAttachment(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.GetOnlineNodesJSON() // 此函数在 heartbeat 模块中实现 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(nodes) } /* 根据标讯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 } objectName += ".txt" log.Println(GetIp(r), "根据标讯id获取正文", bucketID, objectName) w.Write(GetBidDetail(bucketID, objectName)) }