1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package wechatimg
-
- import (
- "bytes"
- "encoding/json"
- "errors"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
- "os"
- "path/filepath"
- "time"
- "wechat-conf/utils"
-
- "github.com/astaxie/beego"
- )
-
- const (
- WechatUploadMediaAPI = "https://api.weixin.qq.com/cgi-bin/material/add_material"
- )
-
- var (
- HttpRequstTimeOut time.Duration
- )
-
- type MediaUpload struct {
- ErrCode int `json:"errcode"`
- ErrMgs string `json:"errmsg"`
- Type string `json:"type"`
- MediaID string `json:"media_id"`
- CreatedAt string `json:"created_at"`
- }
-
- func init() {
- HttpRequstTimeOut, _ = time.ParseDuration("5s")
- }
-
- func UploaImage(token, imagePath string) (mediaid string, err error) {
- file, err := os.Open(imagePath)
- if err != nil {
- beego.Error(err)
- utils.LogError("上传图片失败:", err)
- return
- }
- defer file.Close()
- body := &bytes.Buffer{}
- writer := multipart.NewWriter(body)
- part, err := writer.CreateFormFile("media", filepath.Base(imagePath))
- if err != nil {
- beego.Error(err)
- utils.LogError("上传图片失败:", err)
- return
- }
- _, err = io.Copy(part, file)
- err = writer.Close()
- if err != nil {
- beego.Error(err)
- utils.LogError("上传图片失败:", err)
- return
- }
-
- req, err := http.NewRequest("POST", WechatUploadMediaAPI, body)
- req.Header.Add("Content-Type", writer.FormDataContentType())
- urlQuery := req.URL.Query()
- if err != nil {
- beego.Error(err)
- utils.LogError("上传图片失败:", err)
- return
- }
- urlQuery.Add("access_token", token)
- urlQuery.Add("type", "image")
-
- req.URL.RawQuery = urlQuery.Encode()
- client := http.Client{}
- res, err := client.Do(req)
- if err != nil {
- beego.Error(err)
- utils.LogError("上传图片失败:", err)
- return
- }
- defer res.Body.Close()
- jsonbody, _ := ioutil.ReadAll(res.Body)
- media := MediaUpload{}
- err = json.Unmarshal(jsonbody, &media)
- if err != nil {
- beego.Error(media.ErrMgs)
- utils.LogError("上传图片失败:", media.ErrMgs)
- return
- }
- if media.MediaID == "" {
- beego.Error(media.ErrMgs)
- err = errors.New(media.ErrMgs)
- utils.LogError("上传图片失败:", media.ErrMgs)
- }
- mediaid = media.MediaID
- return
- }
|