liuchangshun 1 gadu atpakaļ
vecāks
revīzija
b2d9edeb43
2 mainītis faili ar 228 papildinājumiem un 0 dzēšanām
  1. 99 0
      lxCommon/file.go
  2. 129 0
      lxCommon/http.go

+ 99 - 0
lxCommon/file.go

@@ -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 - 0
lxCommon/http.go

@@ -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
+}