mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-13 01:02:27 +08:00
Merge branch 'feature_add_stream_upload' into v2
# Conflicts: # officialaccount/material/material.go # util/http.go
This commit is contained in:
@@ -163,7 +163,7 @@ type resAddMaterial struct {
|
||||
}
|
||||
|
||||
// AddMaterialFromReader 上传永久性素材(处理视频需要单独上传),从 io.Reader 中读取
|
||||
func (material *Material) AddMaterialFromReader(mediaType MediaType, filename string, reader io.Reader) (mediaID string, url string, err error) {
|
||||
func (material *Material) AddMaterialFromReader(mediaType MediaType, filename string) (mediaID string, url string, err error) {
|
||||
if mediaType == MediaTypeVideo {
|
||||
err = errors.New("永久视频素材上传使用 AddVideo 方法")
|
||||
return
|
||||
|
||||
@@ -3,6 +3,9 @@ package material
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/silenceper/wechat/v2/util"
|
||||
)
|
||||
@@ -38,16 +41,32 @@ type Media struct {
|
||||
}
|
||||
|
||||
// MediaUpload 临时素材上传
|
||||
func (material *Material) MediaUpload(mediaType MediaType, filename string) (media Media, err error) {
|
||||
func (material *Material) MediaUpload(mediaType MediaType, url string) (media Media, err error) {
|
||||
var accessToken string
|
||||
accessToken, err = material.GetAccessToken()
|
||||
if err != nil {
|
||||
if accessToken, err = material.GetAccessToken(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf("%s?access_token=%s&type=%s", mediaUploadURL, accessToken, mediaType)
|
||||
// 使用strings.LastIndex函数找到最后一个斜杠的位置
|
||||
lastSlashIndex := strings.LastIndex(url, "/")
|
||||
// 从最后一个斜杠的位置截取到最后,获取文件名
|
||||
filename := url[lastSlashIndex+1:]
|
||||
// 获取资源
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("get image error: %v", err)
|
||||
return
|
||||
}
|
||||
// 读取响应到内存
|
||||
var imageData []byte
|
||||
imageData, err = io.ReadAll(resp.Body)
|
||||
defer resp.Body.Close()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("read image error: %v", err)
|
||||
return
|
||||
}
|
||||
var response []byte
|
||||
response, err = util.PostFile("media", filename, uri)
|
||||
response, err = util.PostFile("media", imageData, filename, "", uri)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -56,7 +75,7 @@ func (material *Material) MediaUpload(mediaType MediaType, filename string) (med
|
||||
return
|
||||
}
|
||||
if media.ErrCode != 0 {
|
||||
err = fmt.Errorf("MediaUpload error : errcode=%v , errmsg=%v", media.ErrCode, media.ErrMsg)
|
||||
err = fmt.Errorf("MediaUpload error : errcode=%v, errmsg=%v", media.ErrCode, media.ErrMsg)
|
||||
return
|
||||
}
|
||||
return
|
||||
@@ -91,7 +110,8 @@ func (material *Material) ImageUpload(filename string) (url string, err error) {
|
||||
|
||||
uri := fmt.Sprintf("%s?access_token=%s", mediaUploadImageURL, accessToken)
|
||||
var response []byte
|
||||
response, err = util.PostFile("media", filename, uri)
|
||||
var directory = filename
|
||||
response, err = util.PostFile("media", nil, "", directory, uri)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user