Fetch the repository succeeded.
/*
* 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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。