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.
174 lines
3.6 KiB
174 lines
3.6 KiB
3 years ago
|
/*
|
||
|
* @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
|
||
|
}
|