@@ -3,6 +3,9 @@ package material
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "io"
7
+ "net/http"
8
+ "strings"
6
9
7
10
"github.com/silenceper/wechat/v2/util"
8
11
)
@@ -38,16 +41,32 @@ type Media struct {
38
41
}
39
42
40
43
// MediaUpload 临时素材上传
41
- func (material * Material ) MediaUpload (mediaType MediaType , filename string ) (media Media , err error ) {
44
+ func (material * Material ) MediaUpload (mediaType MediaType , url string ) (media Media , err error ) {
42
45
var accessToken string
43
- accessToken , err = material .GetAccessToken ()
44
- if err != nil {
46
+ if accessToken , err = material .GetAccessToken (); err != nil {
45
47
return
46
48
}
47
-
48
49
uri := fmt .Sprintf ("%s?access_token=%s&type=%s" , mediaUploadURL , accessToken , mediaType )
50
+ // 使用strings.LastIndex函数找到最后一个斜杠的位置
51
+ lastSlashIndex := strings .LastIndex (url , "/" )
52
+ // 从最后一个斜杠的位置截取到最后,获取文件名
53
+ filename := url [lastSlashIndex + 1 :]
54
+ // 获取图片
55
+ resp , err := http .Get (url )
56
+ if err != nil {
57
+ err = fmt .Errorf ("get image error: %v" , err )
58
+ return
59
+ }
60
+ // 读取响应到内存
61
+ var imageData []byte
62
+ imageData , err = io .ReadAll (resp .Body )
63
+ defer resp .Body .Close ()
64
+ if err != nil {
65
+ err = fmt .Errorf ("read image error: %v" , err )
66
+ return
67
+ }
49
68
var response []byte
50
- response , err = util .PostFile ("media" , filename , uri )
69
+ response , err = util .PostFile ("media" , imageData , filename , "" , uri )
51
70
if err != nil {
52
71
return
53
72
}
@@ -56,7 +75,7 @@ func (material *Material) MediaUpload(mediaType MediaType, filename string) (med
56
75
return
57
76
}
58
77
if media .ErrCode != 0 {
59
- err = fmt .Errorf ("MediaUpload error : errcode=%v , errmsg=%v" , media .ErrCode , media .ErrMsg )
78
+ err = fmt .Errorf ("MediaUpload error : errcode=%v, errmsg=%v" , media .ErrCode , media .ErrMsg )
60
79
return
61
80
}
62
81
return
@@ -91,7 +110,8 @@ func (material *Material) ImageUpload(filename string) (url string, err error) {
91
110
92
111
uri := fmt .Sprintf ("%s?access_token=%s" , mediaUploadImageURL , accessToken )
93
112
var response []byte
94
- response , err = util .PostFile ("media" , filename , uri )
113
+ var directory = filename
114
+ response , err = util .PostFile ("media" , nil , "" , directory , uri )
95
115
if err != nil {
96
116
return
97
117
}
0 commit comments