| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package main
- import (
- "context"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "io"
- "os"
- "rtu_linux_services/servicelib"
- "strings"
- "time"
- "hnyfkj.com.cn/rtu/linux/utils/ftpclient"
- )
- func getFtpUpgradeInfo(ctx context.Context, u *servicelib.UpgradeURL, timeout time.Duration) (upgradeInfo, error) {
- localFile, err := ftpclient.DownloadFileFromFtp(ctx, u.Host, u.User, u.Pass, u.Path, timeout)
- if err != nil {
- return upgradeInfo{}, err
- }
- defer os.Remove(localFile)
- data, err := os.ReadFile(localFile)
- if err != nil {
- return upgradeInfo{}, err
- }
- var info upgradeInfo
- if err := json.Unmarshal(data, &info); err != nil {
- return upgradeInfo{}, err
- }
- info.Version = strings.TrimSpace(info.Version)
- info.SHA256 = strings.TrimSpace(info.SHA256)
- if info.Version == "" {
- return upgradeInfo{}, fmt.Errorf("升级版本号不能为空")
- }
- if info.SHA256 == "" {
- return upgradeInfo{}, fmt.Errorf("升级校验值不能为空")
- }
- if len(info.SHA256) != 64 {
- return upgradeInfo{}, fmt.Errorf("升级校验值长度错误")
- }
- if _, err := hex.DecodeString(info.SHA256); err != nil {
- return upgradeInfo{}, fmt.Errorf("升级校验值格式错误")
- }
- return info, nil
- }
- func downloadFtpUpgradePackage(ctx context.Context, u *servicelib.UpgradeURL, localFile string, timeout time.Duration) error {
- file, err := ftpclient.DownloadFileFromFtp(ctx, u.Host, u.User, u.Pass, u.Path, timeout)
- if err != nil {
- return err
- }
- defer os.Remove(file)
- src, err := os.Open(file)
- if err != nil {
- return err
- }
- defer src.Close()
- dst, err := os.Create(localFile)
- if err != nil {
- return err
- }
- if _, err := io.Copy(dst, src); err != nil {
- dst.Close()
- _ = os.Remove(localFile)
- return err
- }
- if err := dst.Close(); err != nil {
- _ = os.Remove(localFile)
- return err
- }
- return nil
- }
|