4
4
"encoding/json"
5
5
"errors"
6
6
"fmt"
7
+ "io"
8
+ "os"
7
9
8
10
"github.com/silenceper/wechat/v2/officialaccount/context"
9
11
"github.com/silenceper/wechat/v2/util"
@@ -160,8 +162,8 @@ type resAddMaterial struct {
160
162
URL string `json:"url"`
161
163
}
162
164
163
- // AddMaterial 上传永久性素材(处理视频需要单独上传)
164
- func (material * Material ) AddMaterial (mediaType MediaType , filename string ) (mediaID string , url string , err error ) {
165
+ // AddMaterialFromReader 上传永久性素材(处理视频需要单独上传),从 io.Reader 中读取
166
+ func (material * Material ) AddMaterialFromReader (mediaType MediaType , filename string , reader io. Reader ) (mediaID string , url string , err error ) {
165
167
if mediaType == MediaTypeVideo {
166
168
err = errors .New ("永久视频素材上传使用 AddVideo 方法" )
167
169
return
@@ -174,7 +176,7 @@ func (material *Material) AddMaterial(mediaType MediaType, filename string) (med
174
176
175
177
uri := fmt .Sprintf ("%s?access_token=%s&type=%s" , addMaterialURL , accessToken , mediaType )
176
178
var response []byte
177
- response , err = util .PostFile ("media" , filename , uri )
179
+ response , err = util .PostFileFromReader ("media" , filename , uri , reader )
178
180
if err != nil {
179
181
return
180
182
}
@@ -192,13 +194,24 @@ func (material *Material) AddMaterial(mediaType MediaType, filename string) (med
192
194
return
193
195
}
194
196
197
+ // AddMaterial 上传永久性素材(处理视频需要单独上传)
198
+ func (material * Material ) AddMaterial (mediaType MediaType , filename string ) (mediaID string , url string , err error ) {
199
+ f , err := os .Open (filename )
200
+ if err != nil {
201
+ return
202
+ }
203
+ defer func () { _ = f .Close () }()
204
+
205
+ return material .AddMaterialFromReader (mediaType , filename , f )
206
+ }
207
+
195
208
type reqVideo struct {
196
209
Title string `json:"title"`
197
210
Introduction string `json:"introduction"`
198
211
}
199
212
200
- // AddVideo 永久视频素材文件上传
201
- func (material * Material ) AddVideo (filename , title , introduction string ) (mediaID string , url string , err error ) {
213
+ // AddVideoFromReader 永久视频素材文件上传,从 io.Reader 中读取
214
+ func (material * Material ) AddVideoFromReader (filename , title , introduction string , reader io. Reader ) (mediaID string , url string , err error ) {
202
215
var accessToken string
203
216
accessToken , err = material .GetAccessToken ()
204
217
if err != nil {
@@ -219,9 +232,10 @@ func (material *Material) AddVideo(filename, title, introduction string) (mediaI
219
232
220
233
fields := []util.MultipartFormField {
221
234
{
222
- IsFile : true ,
223
- Fieldname : "media" ,
224
- Filename : filename ,
235
+ IsFile : true ,
236
+ Fieldname : "media" ,
237
+ Filename : filename ,
238
+ FileReader : reader ,
225
239
},
226
240
{
227
241
IsFile : false ,
@@ -250,6 +264,17 @@ func (material *Material) AddVideo(filename, title, introduction string) (mediaI
250
264
return
251
265
}
252
266
267
+ // AddVideo 永久视频素材文件上传
268
+ func (material * Material ) AddVideo (filename , title , introduction string ) (mediaID string , url string , err error ) {
269
+ f , err := os .Open (filename )
270
+ if err != nil {
271
+ return "" , "" , err
272
+ }
273
+ defer func () { _ = f .Close () }()
274
+
275
+ return material .AddVideoFromReader (filename , title , introduction , f )
276
+ }
277
+
253
278
type reqDeleteMaterial struct {
254
279
MediaID string `json:"media_id"`
255
280
}
0 commit comments