102 lines
1.7 KiB
Go
102 lines
1.7 KiB
Go
package netutil
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
// "path/filepath"
|
|
. "github.com/leanote/leanote/app/lea"
|
|
"io/ioutil"
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
// net的util
|
|
|
|
// toPath 文件保存的目录
|
|
// 默认是/tmp
|
|
// 返回文件的完整目录
|
|
func WriteUrl(url string, toPath string) (length int64, newFilename, path string, ok bool) {
|
|
if url == "" {
|
|
return
|
|
}
|
|
content, err := GetContent(url)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
length = int64(len(content))
|
|
|
|
// a.html?a=a11&xxx
|
|
url = trimQueryParams(url)
|
|
_, ext := SplitFilename(url)
|
|
if toPath == "" {
|
|
toPath = "/tmp"
|
|
}
|
|
// dir := filepath.Dir(toPath)
|
|
newFilename = NewGuid() + ext
|
|
fullPath := toPath + "/" + newFilename
|
|
|
|
// 写到文件中
|
|
file, err := os.Create(fullPath)
|
|
defer file.Close()
|
|
if err != nil {
|
|
return
|
|
}
|
|
file.Write(content)
|
|
|
|
path = fullPath
|
|
ok = true
|
|
return
|
|
}
|
|
|
|
// 得到内容
|
|
func GetContent(url string) (content []byte, err error) {
|
|
var resp *http.Response
|
|
resp, err = http.Get(url)
|
|
if resp != nil && resp.Body != nil {
|
|
defer resp.Body.Close()
|
|
} else {
|
|
}
|
|
if resp == nil || resp.Body == nil || err != nil || resp.StatusCode != http.StatusOK {
|
|
return
|
|
}
|
|
|
|
var buf []byte
|
|
buf, err = ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
content = buf
|
|
err = nil
|
|
return
|
|
}
|
|
|
|
// 将url ?, #后面的字符串去掉
|
|
func trimQueryParams(url string) string {
|
|
pos := strings.Index(url, "?")
|
|
if pos != -1 {
|
|
url = Substr(url, 0, pos)
|
|
}
|
|
|
|
pos = strings.Index(url, "#")
|
|
if pos != -1 {
|
|
url = Substr(url, 0, pos)
|
|
}
|
|
|
|
pos = strings.Index(url, "!")
|
|
if pos != -1 {
|
|
url = Substr(url, 0, pos)
|
|
}
|
|
return url
|
|
}
|
|
|
|
// 通过domain得到ip
|
|
func GetIpFromDomain(domain string) string {
|
|
ip, _ := net.LookupIP(domain)
|
|
if ip != nil && len(ip) > 0 {
|
|
return ip[0].String()
|
|
}
|
|
return ""
|
|
}
|