wangchuanjin преди 3 месеца
ревизия
bc2e493950
променени са 8 файла, в които са добавени 323 реда и са изтрити 0 реда
  1. 234 0
      client.go
  2. 37 0
      client_restful_test.go
  3. 15 0
      client_rpc_test.go
  4. 16 0
      constant/constant.go
  5. 14 0
      entity/entity.go
  6. 5 0
      go.mod
  7. 2 0
      go.sum
  8. BIN
      qie.jpeg

+ 234 - 0
client.go

@@ -0,0 +1,234 @@
+package client
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"io"
+	"log"
+	"mime/multipart"
+	"net/http"
+	"net/rpc"
+	"strconv"
+
+	"app.yhyue.com/moapp/jybase/api"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
+	"jygit.jydev.jianyu360.cn/BaseService/ossClient/entity"
+)
+
+/* restful方式上传
+ * @param domain 域名,例如:https://ossservice.jianyu360.cn
+ * @param bucketId 桶id
+ * @param objectName 对象名称
+ * @param stream 文件流
+ * @param gzip 是否压缩
+ * @return {"error_code":0,"error_msg":"上传成功"}
+ */
+func UpLoadByRestful(domain, bucketId, objectName string, stream []byte, gzip bool) (reply *api.Result) {
+	reply = &api.Result{Error_code: -1}
+
+	// 创建一个缓冲区来存储表单数据
+	body := &bytes.Buffer{}
+	writer := multipart.NewWriter(body)
+	writer.WriteField("bucket_id", bucketId)
+	writer.WriteField("object_name", objectName)
+	writer.WriteField("gzip", strconv.FormatBool(gzip))
+
+	// 创建表单字段
+	part, err := writer.CreateFormFile("file", objectName)
+	if err != nil {
+		reply.Error_msg = err.Error()
+		return
+	}
+
+	// 模拟文件流
+	fileStream := bytes.NewReader(stream)
+
+	// 将文件流复制到表单字段
+	_, err = io.Copy(part, fileStream)
+	if err != nil {
+		reply.Error_msg = err.Error()
+		return
+	}
+
+	// 创建 HTTP 请求
+	if respBody, err := post(domain+constant.UploadUrl, writer, body); err != nil {
+		reply.Error_msg = err.Error()
+	} else {
+		json.Unmarshal(respBody, &reply)
+	}
+	return
+}
+
+/* restful方式下载
+ * @param domain 域名,例如:https://ossservice.jianyu360.cn
+ * @param bucketId 桶id
+ * @param objectName 对象名称
+ * @return {"error_code":0,"error_msg":"下载成功"}
+ */
+func DownloadByRestful(domain, bucketId, objectName string) (reply *api.Result) {
+	reply = &api.Result{}
+	// 创建一个缓冲区来存储表单数据
+	body := &bytes.Buffer{}
+	writer := multipart.NewWriter(body)
+	writer.WriteField("bucket_id", bucketId)
+	writer.WriteField("object_name", objectName)
+	if respBody, err := post(domain+constant.DownloadUrl, writer, body); err != nil {
+		reply.Error_msg = err.Error()
+	} else {
+		reply.Error_msg = constant.DownloadSuccess
+		reply.Data = respBody
+	}
+	return
+}
+
+/* restful方式删除
+ * @param domain 域名,例如:https://ossservice.jianyu360.cn
+ * @param bucketId 桶id
+ * @param objectName 对象名称
+ * @return {"error_code":0,"error_msg":"上传成功"}
+ */
+func DeleteByRestful(domain, bucketId, objectName string) (reply *api.Result) {
+	reply = &api.Result{}
+	// 创建一个缓冲区来存储表单数据
+	body := &bytes.Buffer{}
+	writer := multipart.NewWriter(body)
+	writer.WriteField("bucket_id", bucketId)
+	writer.WriteField("object_name", objectName)
+	if respBody, err := post(domain+constant.DeleteUrl, writer, body); err != nil {
+		reply.Error_msg = err.Error()
+	} else {
+		json.Unmarshal(respBody, &reply)
+	}
+	return
+}
+
+/* restful方式获取标讯正文
+ * @param domain 域名,例如:https://ossservice.jianyu360.cn
+ * @param bucketId 桶id
+ * @param objectName 对象名称
+ * @return {"error_code":0,"error_msg":"获取正文成功","data":"正文内容"}
+ */
+func GetBidDetailByRestful(domain, bucketId, objectName string) (reply *api.Result) {
+	reply = &api.Result{}
+	// 创建一个缓冲区来存储表单数据
+	body := &bytes.Buffer{}
+	writer := multipart.NewWriter(body)
+	writer.WriteField("bucket_id", bucketId)
+	writer.WriteField("object_name", objectName)
+	if respBody, err := post(domain+constant.GetBidDetailUrl, writer, body); err != nil {
+		reply.Error_msg = err.Error()
+	} else {
+		reply.Error_msg = constant.GetBidDetailSuccess
+		reply.Data = string(respBody)
+	}
+	return
+}
+
+func post(url string, writer *multipart.Writer, body *bytes.Buffer) ([]byte, error) {
+	// 关闭表单写入器
+	if err := writer.Close(); err != nil {
+		return nil, err
+	}
+	// 创建 HTTP 请求
+	req, err := http.NewRequest("POST", url, body)
+	if err != nil {
+		log.Println("Error creating request:", err)
+		return nil, err
+	}
+
+	// 设置请求头
+	req.Header.Set("Content-Type", writer.FormDataContentType())
+
+	// 发送请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+
+	// 读取响应
+	respBody, err := io.ReadAll(resp.Body)
+	if err != nil {
+		return nil, err
+	}
+	if resp.StatusCode != http.StatusOK {
+		return nil, errors.New(string(respBody))
+	}
+	return respBody, nil
+}
+
+/* rpc方式上传
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @param args.Stream 文件流
+ * @param args.Gzip 是否压缩
+ * @return {"error_code":0,"error_msg":"上传成功"}
+ * @return error 错误信息
+ */
+func UpLoadByRpc(address string, args *entity.UploadArgs) (api.Result, error) {
+	var reply api.Result
+	err := rpcCall(address, "OSSService.Upload", args, &reply)
+	return reply, err
+}
+
+/*
+ *rpc方式下载
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @return {"error_code":0,"error_msg":"下载成功","data":"文件流"}
+ * @return error 错误信息
+ */
+func DownloadByRpc(address string, args *entity.Args) (api.Result, error) {
+	var reply api.Result
+	err := rpcCall(address, "OSSService.Download", args, &reply)
+	return reply, err
+}
+
+/* rpc方式删除
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @return {"error_code":0,"error_msg":"删除成功"}
+ * @return error 错误信息
+ */
+func DeleteByRpc(address string, args *entity.Args) (api.Result, error) {
+	var reply api.Result
+	err := rpcCall(address, "OSSService.Delete", args, &reply)
+	return reply, err
+}
+
+/*
+ *rpc方式获取标讯正文
+ * @param address 域名,例如:192.168.3.206:8110
+ * @param args 参数
+ * @param args.BucketID 文件名
+ * @param args.objectName 对象名称
+ * @return {"error_code":0,"error_msg":"下载成功","data":"正文内容"}
+ * @return error 错误信息
+ */
+func GetBidDetailByRpc(address string, args *entity.Args) (api.Result, error) {
+	var reply api.Result
+	err := rpcCall(address, "OSSService.GetBidDetail", args, &reply)
+	return reply, err
+}
+func rpcCall(address, serviceMethod string, args any, reply any) error {
+	client, err := rpc.DialHTTP("tcp", address)
+	if err != nil {
+		log.Println(err)
+		return err
+	}
+	defer client.Close()
+	err = client.Call(serviceMethod, args, reply)
+	if err != nil {
+		log.Println(err)
+		return err
+	}
+	return nil
+}

+ 37 - 0
client_restful_test.go

@@ -0,0 +1,37 @@
+package client
+
+import (
+	"io/ioutil"
+	"testing"
+)
+
+var (
+	restfulAddress = "http://127.0.0.1:8011"
+)
+
+// restful方式上传附件
+func TestUploadFileByRestful(t *testing.T) {
+	b, _ := ioutil.ReadFile("./" + imgFileName)
+	t.Log(UpLoadByRestful(restfulAddress, bucketID, imgFileName, b, false))
+}
+
+// restful方式上传正文
+func TestUploadTextByRestful(t *testing.T) {
+	b := []byte(textDetail)
+	t.Log(UpLoadByRestful(restfulAddress, bucketID, txtFileName, b, false))
+}
+
+// restful方式下载
+func TestDownloadTextByRestful(t *testing.T) {
+	t.Log(DownloadByRestful(restfulAddress, bucketID, txtFileName))
+}
+
+// restful方式删除
+func TestDeleteByRestful(t *testing.T) {
+	t.Log(DeleteByRestful(restfulAddress, bucketID, txtFileName))
+}
+
+// restful方式获取标讯正文
+func TestGetBidDetailByRestful(t *testing.T) {
+	t.Log(GetBidDetailByRestful(restfulAddress, bucketID, txtFileId))
+}

Файловите разлики са ограничени, защото са твърде много
+ 15 - 0
client_rpc_test.go


+ 16 - 0
constant/constant.go

@@ -0,0 +1,16 @@
+package constant
+
+const (
+	UploadUrl           = "/ossservice/upload"
+	DownloadUrl         = "/ossservice/download"
+	DeleteUrl           = "/ossservice/delete"
+	GetBidDetailUrl     = "/ossservice/biddetail"
+	UploadSuccess       = "上传成功"
+	DownloadSuccess     = "下载成功"
+	DeleteSuccess       = "删除成功"
+	GetBidDetailSuccess = "获取正文成功"
+	UploadFail          = "上传失败:%v"
+	DownloadFail        = "下载失败:%v"
+	DeleteFail          = "删除失败:%v"
+	BidDetailFail       = "获取正文失败:%v"
+)

+ 14 - 0
entity/entity.go

@@ -0,0 +1,14 @@
+package entity
+
+// RPC相关结构体
+type UploadArgs struct {
+	Stream     []byte // 客户端将文件数据传递过来
+	Gzip       bool   //是否压缩
+	BucketID   string //桶id
+	ObjectName string //对象名称
+}
+
+type Args struct {
+	BucketID   string //桶id
+	ObjectName string //对象名称
+}

+ 5 - 0
go.mod

@@ -0,0 +1,5 @@
+module jygit.jydev.jianyu360.cn/BaseService/ossClient
+
+go 1.20
+
+require app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa

+ 2 - 0
go.sum

@@ -0,0 +1,2 @@
+app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa h1:F45Yi0O0W7ezagpb4EWc57CGNoQ60HN3Ut7npO/sto4=
+app.yhyue.com/moapp/jybase v0.0.0-20250403014436-53740a2395aa/go.mod h1:OEtMbsn7wY/7MLgV7yDUpVDKExUoj3B8h+4w4ZckJQQ=

BIN
qie.jpeg


Някои файлове не бяха показани, защото твърде много файлове са промени