You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
173 lines
3.6 KiB
173 lines
3.6 KiB
/* |
|
* @desc:工具 |
|
* |
|
* |
|
* @Date: 2022/3/4 22:16 |
|
*/ |
|
|
|
package libUtils |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"github.com/gogf/gf/v2/crypto/gmd5" |
|
"github.com/gogf/gf/v2/encoding/gcharset" |
|
"github.com/gogf/gf/v2/encoding/gjson" |
|
"github.com/gogf/gf/v2/encoding/gurl" |
|
"github.com/gogf/gf/v2/frame/g" |
|
"github.com/gogf/gf/v2/net/ghttp" |
|
"net" |
|
"net/http" |
|
"os" |
|
"path" |
|
"strings" |
|
) |
|
|
|
// EncryptPassword 密码加密 |
|
func EncryptPassword(password, salt string) string { |
|
return gmd5.MustEncryptString(gmd5.MustEncryptString(password) + gmd5.MustEncryptString(salt)) |
|
} |
|
|
|
// GetDomain 获取当前请求接口域名 |
|
func GetDomain(ctx context.Context) string { |
|
r := g.RequestFromCtx(ctx) |
|
pathInfo, err := gurl.ParseURL(r.GetUrl(), -1) |
|
if err != nil { |
|
g.Log().Error(ctx, err) |
|
return "" |
|
} |
|
return fmt.Sprintf("%s://%s:%s/", pathInfo["scheme"], pathInfo["host"], pathInfo["port"]) |
|
} |
|
|
|
// GetClientIp 获取客户端IP |
|
func GetClientIp(ctx context.Context) string { |
|
return g.RequestFromCtx(ctx).GetClientIp() |
|
} |
|
|
|
// GetUserAgent 获取user-agent |
|
func GetUserAgent(ctx context.Context) string { |
|
return ghttp.RequestFromCtx(ctx).Header.Get("User-Agent") |
|
} |
|
|
|
// GetLocalIP 服务端ip |
|
func GetLocalIP() (ip string, err error) { |
|
var addrs []net.Addr |
|
addrs, err = net.InterfaceAddrs() |
|
if err != nil { |
|
return |
|
} |
|
for _, addr := range addrs { |
|
ipAddr, ok := addr.(*net.IPNet) |
|
if !ok { |
|
continue |
|
} |
|
if ipAddr.IP.IsLoopback() { |
|
continue |
|
} |
|
if !ipAddr.IP.IsGlobalUnicast() { |
|
continue |
|
} |
|
return ipAddr.IP.String(), nil |
|
} |
|
return |
|
} |
|
|
|
// GetCityByIp 获取ip所属城市 |
|
func GetCityByIp(ip string) string { |
|
if ip == "" { |
|
return "" |
|
} |
|
if ip == "[::1]" || ip == "127.0.0.1" { |
|
return "内网IP" |
|
} |
|
url := "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip |
|
bytes := g.Client().GetBytes(context.TODO(), url) |
|
src := string(bytes) |
|
srcCharset := "GBK" |
|
tmp, _ := gcharset.ToUTF8(srcCharset, src) |
|
json, err := gjson.DecodeToJson(tmp) |
|
if err != nil { |
|
return "" |
|
} |
|
if json.Get("code").Int() == 0 { |
|
city := fmt.Sprintf("%s %s", json.Get("pro").String(), json.Get("city").String()) |
|
return city |
|
} else { |
|
return "" |
|
} |
|
} |
|
|
|
// 写入文件 |
|
func WriteToFile(fileName string, content string) error { |
|
f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644) |
|
if err != nil { |
|
return err |
|
} |
|
n, _ := f.Seek(0, os.SEEK_END) |
|
_, err = f.WriteAt([]byte(content), n) |
|
defer f.Close() |
|
return err |
|
} |
|
|
|
// 文件或文件夹是否存在 |
|
func FileIsExisted(filename string) bool { |
|
existed := true |
|
if _, err := os.Stat(filename); os.IsNotExist(err) { |
|
existed = false |
|
} |
|
return existed |
|
} |
|
|
|
// 解析路径获取文件名称及后缀 |
|
func ParseFilePath(pathStr string) (fileName string, fileType string) { |
|
fileNameWithSuffix := path.Base(pathStr) |
|
fileType = path.Ext(fileNameWithSuffix) |
|
fileName = strings.TrimSuffix(fileNameWithSuffix, fileType) |
|
return |
|
} |
|
|
|
// IsNotExistMkDir 检查文件夹是否存在 |
|
// 如果不存在则新建文件夹 |
|
func IsNotExistMkDir(src string) error { |
|
if exist := !FileIsExisted(src); exist == false { |
|
if err := MkDir(src); err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
} |
|
|
|
// MkDir 新建文件夹 |
|
func MkDir(src string) error { |
|
err := os.MkdirAll(src, os.ModePerm) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
return nil |
|
} |
|
|
|
//获取文件后缀 |
|
func GetExt(fileName string) string { |
|
return path.Ext(fileName) |
|
} |
|
|
|
// GetType 获取文件类型 |
|
func GetType(p string) (result string, err error) { |
|
file, err := os.Open(p) |
|
if err != nil { |
|
g.Log().Error(context.TODO(), err) |
|
return |
|
} |
|
buff := make([]byte, 512) |
|
|
|
_, err = file.Read(buff) |
|
|
|
if err != nil { |
|
g.Log().Error(context.TODO(), err) |
|
return |
|
} |
|
filetype := http.DetectContentType(buff) |
|
return filetype, nil |
|
}
|
|
|