From aafc82eba357950f2b310d01258492b619f1f12d Mon Sep 17 00:00:00 2001 From: lumiaqian Date: Wed, 16 Oct 2024 15:59:34 +0800 Subject: [PATCH 1/4] feat(media): add getTempFile api add getTempFile api --- work/material/media.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/work/material/media.go b/work/material/media.go index b9647ad..c3c8e0c 100644 --- a/work/material/media.go +++ b/work/material/media.go @@ -14,6 +14,8 @@ const ( uploadTempFile = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=%s&type=%s" // uploadAttachment 上传附件资源 uploadAttachment = "https://qyapi.weixin.qq.com/cgi-bin/media/upload_attachment?access_token=%s&media_type=%s&attachment_type=%d" + // getTempFile 获取临时素材 + getTempFile = "https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=%s&media_id=%s" ) // UploadImgResponse 上传图片响应 @@ -148,3 +150,21 @@ func (r *Client) UploadAttachmentFromReader(filename, mediaType string, reader i err = util.DecodeWithError(response, result, "UploadAttachment") return result, err } + +// GetTempFile 获取临时素材 +// @see https://developer.work.weixin.qq.com/document/path/90254 +func (r *Client) GetTempFile(mediaID string) ([]byte, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + url := fmt.Sprintf(getTempFile, accessToken, mediaID) + response, err := util.HTTPGet(url) + if err != nil { + return nil, err + } + return response, nil +} From 7e032715bad8bffad152978eddc9999b3dbe8aac Mon Sep 17 00:00:00 2001 From: lumiaqian Date: Wed, 16 Oct 2024 16:57:06 +0800 Subject: [PATCH 2/4] feat(media): handle error in GetTempFile handle error in GetTempFile --- work/material/media.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/work/material/media.go b/work/material/media.go index c3c8e0c..5419dfc 100644 --- a/work/material/media.go +++ b/work/material/media.go @@ -166,5 +166,14 @@ func (r *Client) GetTempFile(mediaID string) ([]byte, error) { if err != nil { return nil, err } + + // 检查响应是否为错误信息 + errorResponse := &util.CommonError{} + err = util.DecodeWithError(response, errorResponse, "GetTempFile") + if err == nil && errorResponse.ErrCode != 0 { + return nil, fmt.Errorf("GetTempFile error: %d, %s", errorResponse.ErrCode, errorResponse.ErrMsg) + } + + // 如果不是错误响应,则返回原始数据 return response, nil } From a9fc0958f67e5dadadacf1aca5c3a330e0404367 Mon Sep 17 00:00:00 2001 From: lumiaqian Date: Thu, 17 Oct 2024 11:42:27 +0800 Subject: [PATCH 3/4] feat(media): add UploadImgFromReader api add UploadImgFromReader api --- work/material/media.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/work/material/media.go b/work/material/media.go index 5419dfc..42a9b6e 100644 --- a/work/material/media.go +++ b/work/material/media.go @@ -59,6 +59,30 @@ func (r *Client) UploadImg(filename string) (*UploadImgResponse, error) { return result, err } +// UploadImgFromReader 从 io.Reader 上传图片 +// @see https://developer.work.weixin.qq.com/document/path/90256 +func (r *Client) UploadImgFromReader(filename string, reader io.Reader) (*UploadImgResponse, error) { + var ( + accessToken string + err error + ) + if accessToken, err = r.GetAccessToken(); err != nil { + return nil, err + } + var byteData []byte + byteData, err = io.ReadAll(reader) + if err != nil { + return nil, err + } + var response []byte + if response, err = util.PostFileByStream("media", filename, fmt.Sprintf(uploadImgURL, accessToken), byteData); err != nil { + return nil, err + } + result := &UploadImgResponse{} + err = util.DecodeWithError(response, result, "UploadImg") + return result, err +} + // UploadTempFile 上传临时素材 // @see https://developer.work.weixin.qq.com/document/path/90253 // @mediaType 媒体文件类型,分别有图片(image)、语音(voice)、视频(video),普通文件(file) From 8ef82d2acdb75fa9749bd338902ba843ff57041d Mon Sep 17 00:00:00 2001 From: lumiaqian Date: Fri, 25 Oct 2024 17:19:15 +0800 Subject: [PATCH 4/4] fix(media): fixed not return common error fixed not return common error --- work/material/media.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/work/material/media.go b/work/material/media.go index 42a9b6e..551eeee 100644 --- a/work/material/media.go +++ b/work/material/media.go @@ -192,10 +192,9 @@ func (r *Client) GetTempFile(mediaID string) ([]byte, error) { } // 检查响应是否为错误信息 - errorResponse := &util.CommonError{} - err = util.DecodeWithError(response, errorResponse, "GetTempFile") - if err == nil && errorResponse.ErrCode != 0 { - return nil, fmt.Errorf("GetTempFile error: %d, %s", errorResponse.ErrCode, errorResponse.ErrMsg) + err = util.DecodeWithCommonError(response, "GetTempFile") + if err != nil { + return nil, err } // 如果不是错误响应,则返回原始数据