123
This commit is contained in:
parent
77354efdd7
commit
b2d9edeb43
99
lxCommon/file.go
Normal file
99
lxCommon/file.go
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package lxCommon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 二进制流文件保存到本地 name png pdf
|
||||||
|
func SaveFile(url, path, name string) (filePath string, err error) {
|
||||||
|
c := NewClient() //忽略证书
|
||||||
|
_dir := AddNewFile(path)
|
||||||
|
filePath = _dir + name
|
||||||
|
resp, err := c.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = ioutil.WriteFile(filePath, body, 0644)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddNewFile(folder string) string {
|
||||||
|
oldPath := folder
|
||||||
|
if runtime.GOOS == "windows" || runtime.GOOS == "darwin" {
|
||||||
|
oldPath = "./pdf/"
|
||||||
|
}
|
||||||
|
_dir, _ := CreateDateDir(oldPath)
|
||||||
|
return _dir
|
||||||
|
}
|
||||||
|
|
||||||
|
func Copy(src, dst string) (int64, error) {
|
||||||
|
sourceFileStat, err := os.Stat(src)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if !sourceFileStat.Mode().IsRegular() {
|
||||||
|
return 0, fmt.Errorf("%s is not a regular file", src)
|
||||||
|
}
|
||||||
|
source, err := os.Open(src)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer source.Close()
|
||||||
|
destination, err := os.Create(dst)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer destination.Close()
|
||||||
|
nBytes, err := io.Copy(destination, source)
|
||||||
|
return nBytes, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetFileSize(filename string) (int64, error) {
|
||||||
|
fi, err := os.Stat(filename)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return fi.Size() / 1024 / 1024, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateDateDir(basePath string) (dirPath, dataString string) {
|
||||||
|
folderName := time.Now().Format("2006-01-02")
|
||||||
|
folderPath := filepath.Join(basePath, folderName)
|
||||||
|
if _, err := os.Stat(folderPath); os.IsNotExist(err) {
|
||||||
|
// 必须分成两步
|
||||||
|
// 先创建文件夹
|
||||||
|
os.MkdirAll(folderPath, 0777)
|
||||||
|
// 再修改权限
|
||||||
|
os.Chmod(folderPath, 0777)
|
||||||
|
}
|
||||||
|
return folderPath + "/", folderName
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断文件夹/文件是否存在
|
||||||
|
func PathIsExists(path string) (bool, error) {
|
||||||
|
_, err := os.Stat(path)
|
||||||
|
if err == nil {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
129
lxCommon/http.go
Normal file
129
lxCommon/http.go
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package lxCommon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"crypto/tls"
|
||||||
|
"github.com/bytedance/sonic"
|
||||||
|
"golang.org/x/net/publicsuffix"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"mime/multipart"
|
||||||
|
"net/http"
|
||||||
|
"net/http/cookiejar"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// url 路径 filename 文件的上传参数
|
||||||
|
func PostFile(url string, files map[string]string, ext map[string]string) ([]byte, error) {
|
||||||
|
res := []byte{}
|
||||||
|
//创建一个模拟的form中的一个选项,这个form项现在是空的
|
||||||
|
bodyBuf := &bytes.Buffer{}
|
||||||
|
bodyWriter := multipart.NewWriter(bodyBuf)
|
||||||
|
for k, v := range files {
|
||||||
|
//打开文件句柄操作
|
||||||
|
file, err := os.Open(v)
|
||||||
|
if err != nil {
|
||||||
|
//fmt.Println("error opening file")
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
//相当于现在还没选择文件, form项里选择文件的选项
|
||||||
|
fileWriter, err := bodyWriter.CreateFormFile(k, filepath.Base(v))
|
||||||
|
if err != nil {
|
||||||
|
//fmt.Println("error writing to buffer")
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
//iocopy 这里相当于选择了文件,将文件放到form中
|
||||||
|
_, err = io.Copy(fileWriter, file)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//获取上传文件的类型,multipart/form-data; boundary=...
|
||||||
|
contentType := bodyWriter.FormDataContentType()
|
||||||
|
//上传的其他参数
|
||||||
|
for key, val := range ext {
|
||||||
|
_ = bodyWriter.WriteField(key, val)
|
||||||
|
}
|
||||||
|
//这个很关键,必须这样写关闭,不能使用defer关闭,不然会导致错误
|
||||||
|
bodyWriter.Close()
|
||||||
|
//发送post请求到服务端
|
||||||
|
resp, err := http.Post(url, contentType, bodyBuf)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
res, err = ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient() *http.Client {
|
||||||
|
tr := &http.Transport{
|
||||||
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||||
|
}
|
||||||
|
var c = &http.Client{
|
||||||
|
Timeout: time.Duration(1000 * time.Second),
|
||||||
|
Transport: tr,
|
||||||
|
}
|
||||||
|
options := cookiejar.Options{
|
||||||
|
PublicSuffixList: publicsuffix.List,
|
||||||
|
}
|
||||||
|
curCookieJar, _ := cookiejar.New(&options)
|
||||||
|
c.Jar = curCookieJar
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
func HttpJsonStr(c *http.Client, method, url string, header map[string]string, body io.Reader, v *string) error {
|
||||||
|
req, err := http.NewRequest(method, url, body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
resp, err := c.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
by, err := ioutil.ReadAll(resp.Body)
|
||||||
|
*v = string(by)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func HttpJson(c *http.Client, method, url string, header map[string]string, body io.Reader, data interface{}) error {
|
||||||
|
req, err := http.NewRequest(method, url, body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for k, v := range header {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
resp, err := c.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
by, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = sonic.Unmarshal(by, data)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func HttpGetFile(url, path string) error {
|
||||||
|
res, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
f, err := os.Create(path)
|
||||||
|
defer f.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = io.Copy(f, res.Body)
|
||||||
|
return err
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user