feat: 增加获取url链接的文件大小的工具函数
This commit is contained in:
parent
76a08f9ad8
commit
9170c77e32
@ -7,6 +7,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -50,3 +51,50 @@ func SaveUrlFileDisk(url string, path string, filename string) (fullPath string,
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetRemoteFileSize 通过HTTP HEAD请求获取远程文件大小(不下载文件)
|
||||||
|
func GetRemoteFileSize(url string) (size int64, err error) {
|
||||||
|
// 创建HEAD请求
|
||||||
|
req, err := http.NewRequest("HEAD", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
zap.L().Error("GetRemoteFileSize create request err", zap.String("url", url), zap.Error(err))
|
||||||
|
err = errors.New(e.GetMsg(e.ERROR_DOWNLOAD_FILE))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送请求
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
zap.L().Error("GetRemoteFileSize request err", zap.String("url", url), zap.Error(err))
|
||||||
|
err = errors.New(e.GetMsg(e.ERROR_DOWNLOAD_FILE))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// 检查HTTP状态码
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
zap.L().Error("GetRemoteFileSize status code err", zap.String("url", url), zap.Int("status", resp.StatusCode))
|
||||||
|
err = errors.New(e.GetMsg(e.ERROR_DOWNLOAD_FILE))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取Content-Length头部
|
||||||
|
contentLength := resp.Header.Get("Content-Length")
|
||||||
|
if contentLength == "" {
|
||||||
|
zap.L().Error("GetRemoteFileSize Content-Length header not found", zap.String("url", url))
|
||||||
|
err = errors.New("无法获取文件大小")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解析文件大小
|
||||||
|
size, err = strconv.ParseInt(contentLength, 10, 64)
|
||||||
|
size = size / 1024 / 1024
|
||||||
|
if err != nil {
|
||||||
|
zap.L().Error("GetRemoteFileSize parse size err", zap.String("url", url), zap.String("contentLength", contentLength), zap.Error(err))
|
||||||
|
err = errors.New("解析文件大小失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user