98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
|
package httpcall
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"context"
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"finclip-app-manager/infrastructure/config"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"mime/multipart"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
FormDataKey = "file"
|
||
|
ConsumerCustomID = "finstore"
|
||
|
)
|
||
|
|
||
|
type netdiskResponse struct {
|
||
|
Location string `json:"location"`
|
||
|
NetdiskID string `json:"netdiskID"`
|
||
|
ResourceID string `json:"resourceID"`
|
||
|
}
|
||
|
|
||
|
func (c *Client) Download(ctx context.Context, path string) ([]byte, error) {
|
||
|
url := path
|
||
|
rsp, err := c.Request(ctx).Get(url)
|
||
|
if err != nil {
|
||
|
log.Errorf("netdisk download err:%s", err.Error())
|
||
|
return nil, err
|
||
|
}
|
||
|
if rsp.StatusCode() != http.StatusOK {
|
||
|
log.Errorf("netdisk download status code err,code:%d", rsp.StatusCode())
|
||
|
return nil, errors.New("download http code err")
|
||
|
}
|
||
|
return rsp.Body(), nil
|
||
|
}
|
||
|
|
||
|
func (c *Client) DownloadByNetdiskId(ctx context.Context, netdiskId string) ([]byte, error) {
|
||
|
url := fmt.Sprintf("%s%s%s", config.GetConfig().NetdiskHost, config.GetConfig().NetdiskInternalDownloadUrl, netdiskId)
|
||
|
rsp, err := c.Request(ctx).Get(url)
|
||
|
if err != nil {
|
||
|
log.Errorf("netdisk download err:%s", err.Error())
|
||
|
return nil, err
|
||
|
}
|
||
|
if rsp.StatusCode() != http.StatusOK {
|
||
|
log.Errorf("netdisk download status code err,code:%d", rsp.StatusCode())
|
||
|
return nil, errors.New("download http code err")
|
||
|
}
|
||
|
return rsp.Body(), nil
|
||
|
}
|
||
|
|
||
|
func (c *Client) Upload(ctx context.Context, name string, inFile io.Reader, useCdn bool) (string, error) {
|
||
|
url := config.GetConfig().NetdiskHost + config.GetConfig().NetdiskUploadURL
|
||
|
body := &bytes.Buffer{}
|
||
|
writer := multipart.NewWriter(body)
|
||
|
headers := map[string]string{
|
||
|
"Accept": "application/json, text/plain, */*",
|
||
|
"Content-Type": writer.FormDataContentType(),
|
||
|
"X-Consumer-Custom-ID": ConsumerCustomID,
|
||
|
"url-call": "internal",
|
||
|
}
|
||
|
rsp, err := c.Request(ctx).
|
||
|
SetFileReader(FormDataKey, name, inFile).
|
||
|
SetContentLength(true).
|
||
|
SetHeaders(headers).
|
||
|
Post(url)
|
||
|
if err != nil {
|
||
|
log.Errorf("netdisk upload request err:", err.Error())
|
||
|
return "", err
|
||
|
}
|
||
|
if rsp.StatusCode() != http.StatusOK {
|
||
|
netdiskRsp := ErrInfo{}
|
||
|
err = json.Unmarshal(rsp.Body(), &netdiskRsp)
|
||
|
if err != nil {
|
||
|
log.Errorf("Failed to unmarshal unmarshal netdiskResponse: %v", err)
|
||
|
return "", err
|
||
|
}
|
||
|
log.Errorf("netdisk upload rsp http status code err,code:", rsp.StatusCode())
|
||
|
return "", errors.New(netdiskRsp.Error)
|
||
|
}
|
||
|
netdiskRsp := netdiskResponse{}
|
||
|
err = json.Unmarshal(rsp.Body(), &netdiskRsp)
|
||
|
if err != nil {
|
||
|
log.Errorf("Failed to unmarshal unmarshal netdiskResponse: %v", err)
|
||
|
return "", err
|
||
|
}
|
||
|
return c.genDownloadUrl(netdiskRsp, useCdn), nil
|
||
|
}
|
||
|
|
||
|
func (c *Client) genDownloadUrl(rsp netdiskResponse, useCdn bool) string {
|
||
|
if useCdn && rsp.Location != "" {
|
||
|
return rsp.Location
|
||
|
}
|
||
|
return config.GetConfig().EntryURL + config.GetConfig().NetdiskDownloadURLPrefix + rsp.NetdiskID
|
||
|
}
|