package utils import ( "bytes" "errors" "fmt" "github.com/dubbogo/gost/log/logger" "github.com/exhibition-main/internal/msg" "github.com/tealeg/xlsx" "go.uber.org/zap" "io" "io/ioutil" "net/http" "net/url" "os" "strings" "time" ) // PostForm 发送post请求 func PostForm(urlStr string, data url.Values) (string, error) { resp, err := http.PostForm(urlStr, data) if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error } return string(body), err } func Get(url string) string { client := &http.Client{Timeout: 5 * time.Second} resp, err := client.Get(url) if err != nil { panic(err) } defer resp.Body.Close() var buffer [512]byte result := bytes.NewBuffer(nil) for { n, err := resp.Body.Read(buffer[0:]) result.Write(buffer[0:n]) if err != nil && err == io.EOF { break } else if err != nil { panic(err) } } return result.String() } // ToExcelByType 转成Excel类型 func ToExcelByType(titleList []string, dataList []interface{}, dataType string, filePath string) (content io.ReadSeeker, err error) { // 生成一个新的文件 file := xlsx.NewFile() // 添加sheet页 sheet, _ := file.AddSheet("Sheet1") // 插入表头 titleRow := sheet.AddRow() for _, v := range titleList { cell := titleRow.AddCell() cell.Value = v } // 插入内容 for _, v := range dataList { row := sheet.AddRow() if dataType == "struct" { row.WriteStruct(v, -1) } else if dataType == "slice" { row.WriteSlice(v, -1) } } var buffer bytes.Buffer _ = file.Write(&buffer) if filePath != "" { if err = file.Save(filePath); err != nil { return } } else { content = bytes.NewReader(buffer.Bytes()) } return } // SaveUrlFileDisk 保存图片到本地 func SaveUrlFileDisk(url string, path string, filename string) (fullPath string, err error) { if err = CreateDirPath(path); err != nil { zap.L().Error("SaveUrlFileDisk err ", zap.Error(err)) return } if filename == "" { stepName := strings.Split(url, "/") if len(stepName) > 1 { filename = stepName[len(stepName)-1] } } resp, err := http.Get(url) if err != nil { logger.Errorf("SaveUrlFileDisk get err", err) err = errors.New(msg.ErrorDownloadFile) return } defer func() { if err := recover(); err != nil { logger.Errorf("SaveUrlFileDisk close err", err) } resp.Body.Close() }() bytes, err := ioutil.ReadAll(resp.Body) fullPath = fmt.Sprintf("%s/%s", path, filename) // 写入数据 err = ioutil.WriteFile(fullPath, bytes, 0777) return } // CreateDirPath 递归创建文件夹 func CreateDirPath(path string) (err error) { if _, err = os.Stat(path); os.IsNotExist(err) { if err = os.MkdirAll(path, os.ModePerm); err != nil { return } } return }