Ai
77 Star 124 Fork 105

openEuler/PilotGo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
fileservice.go 2.44 KB
一键复制 编辑 原始数据 按行查看 历史
zhanghan 提交于 2025-08-08 13:26 +08:00 . Plugin client method modification
/*
* Copyright (c) KylinSoft Co., Ltd. 2024.All rights reserved.
* PilotGo licensed under the Mulan Permissive Software License, Version 2.
* See LICENSE file for more details.
* Author: zhanghan2021 <zhanghan@kylinos.cn>
* Date: Tue Mar 12 15:33:09 2024 +0800
*/
package client
import (
"bytes"
"crypto/tls"
"encoding/json"
"errors"
"fmt"
"io"
"net/http"
"os"
"path/filepath"
"strings"
"gitee.com/openeuler/PilotGo/sdk/logger"
"gitee.com/openeuler/PilotGo/sdk/plugin/jwt"
"gitee.com/openeuler/PilotGo/sdk/utils/httputils"
)
func (client *Client) FileUpload(filePath string, filename string) error {
// 以二进制方式上传文件
file := filepath.Join(filePath, filename)
bodyBuf, contentType, err := getUploadBody(file)
if err != nil {
return err
}
serverInfo, err := client.Registry.Get("pilotgo-server")
if err != nil {
return err
}
upload_addr := fmt.Sprintf("http://%s:%s/api/v1/pluginapi/upload?filename=%s", serverInfo.Address, serverInfo.Port, filename)
// 判断服务端是否是http协议
ishttp, err := httputils.ServerIsHttp(upload_addr)
if err != nil {
return err
}
if !ishttp {
upload_addr = fmt.Sprintf("https://%s", strings.Split(upload_addr, "://")[1])
}
req, err := http.NewRequest("POST", upload_addr, bodyBuf)
if err != nil {
return err
}
defer req.Body.Close()
req.Header.Set("Content-Type", contentType)
req.AddCookie(&http.Cookie{
Name: jwt.TokenCookie,
Value: client.token,
})
hc := &http.Client{Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
}}
defer hc.CloseIdleConnections()
resp, err := hc.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
// 读取返回结果
bs, err := io.ReadAll(resp.Body)
if err != nil {
logger.Error("没获取到:%s", err.Error())
return err
}
res := &struct {
StatusCode int `json:"code"`
Data interface{} `json:"data"`
Message string `json:"msg"`
}{}
err = json.Unmarshal(bs, &res)
if err != nil {
logger.Error("解析出错:%s", err.Error())
return err
}
if resp.StatusCode == http.StatusOK && res.StatusCode == http.StatusOK {
return nil
}
return errors.New(res.Message)
}
// 以二进制格式上传文件
func getUploadBody(filename string) (*bytes.Reader, string, error) {
bodyBytes, err := os.ReadFile(filename)
if err != nil {
return bytes.NewReader(bodyBytes), "", err
}
return bytes.NewReader(bodyBytes), "multipart/form-data", nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openeuler/PilotGo.git
git@gitee.com:openeuler/PilotGo.git
openeuler
PilotGo
PilotGo
be4573e26691

搜索帮助