github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/shakearound/material/add.go (about) 1 package material 2 3 import ( 4 "errors" 5 "io" 6 "net/url" 7 "os" 8 "path/filepath" 9 10 "github.com/chanxuehong/wechat/mp/core" 11 ) 12 13 type ImageInfo struct { 14 PicURL string `json:"pic_url"` 15 } 16 17 func Add(clt *core.Client, imagePath, _type string) (info ImageInfo, err error) { 18 file, err := os.Open(imagePath) 19 if err != nil { 20 return 21 } 22 defer file.Close() 23 24 return addFromReader(clt, filepath.Base(imagePath), file, _type) 25 } 26 27 func AddFromReader(clt *core.Client, filename string, reader io.Reader, _type string) (info ImageInfo, err error) { 28 if filename == "" { 29 err = errors.New("empty filename") 30 return 31 } 32 if reader == nil { 33 err = errors.New("nil reader") 34 return 35 } 36 37 return addFromReader(clt, filename, reader, _type) 38 } 39 40 func addFromReader(clt *core.Client, filename string, reader io.Reader, _type string) (info ImageInfo, err error) { 41 var result struct { 42 core.Error 43 ImageInfo `json:"data"` 44 } 45 46 var incompleteURL string 47 if _type != "" { 48 incompleteURL = "https://api.weixin.qq.com/shakearound/material/add?type=" + url.QueryEscape(_type) + 49 "&access_token=" 50 } else { 51 incompleteURL = "https://api.weixin.qq.com/shakearound/material/add?access_token=" 52 } 53 fields := []core.MultipartFormField{{ 54 IsFile: true, 55 Name: "media", 56 FileName: filename, 57 Value: reader, 58 }} 59 if err = clt.PostMultipartForm(incompleteURL, fields, &result); err != nil { 60 return 61 } 62 63 if result.ErrCode != core.ErrCodeOK { 64 err = &result.Error 65 return 66 } 67 info = result.ImageInfo 68 return 69 }