添加头像获取重试机制
This commit is contained in:
parent
c75e60e717
commit
c223141ad1
29
user.go
29
user.go
@ -58,8 +58,18 @@ func (u *User) String() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetAvatarResponse 获取用户头像
|
// GetAvatarResponse 获取用户头像
|
||||||
func (u *User) GetAvatarResponse() (*http.Response, error) {
|
func (u *User) GetAvatarResponse() (resp *http.Response, err error) {
|
||||||
return u.Self.Bot.Caller.Client.WebWxGetHeadImg(u)
|
for i := 0; i < 3; i++ {
|
||||||
|
resp, err = u.Self.Bot.Caller.Client.WebWxGetHeadImg(u)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// 这里存在 ContentLength 为0的情况,需要重试
|
||||||
|
if resp.ContentLength > 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SaveAvatar 下载用户头像
|
// SaveAvatar 下载用户头像
|
||||||
@ -68,7 +78,7 @@ func (u *User) SaveAvatar(filename string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer func() { _ = file.Close() }()
|
||||||
return u.SaveAvatarWithWriter(file)
|
return u.SaveAvatarWithWriter(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,21 +87,12 @@ func (u *User) SaveAvatarWithWriter(writer io.Writer) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// 这里获取头像的响应有时可能会异常
|
|
||||||
// 一般为网路原因
|
|
||||||
// 再去请求一次即可解决
|
|
||||||
if resp.ContentLength == 0 && resp.Header.Get("Content-Type") == "image/jpeg" {
|
|
||||||
resp, err = u.GetAvatarResponse()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 写文件前判断下 content length 是否是 0,不然保存的头像会出现
|
// 写文件前判断下 content length 是否是 0,不然保存的头像会出现
|
||||||
// image not loaded try to open it externally to fix format problem 问题
|
// image not loaded try to open it externally to fix format problem 问题
|
||||||
if resp.ContentLength == 0 {
|
if resp.ContentLength == 0 {
|
||||||
return fmt.Errorf("get avatar response content length is 0")
|
return errors.New("get avatar response content length is 0")
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer func() { _ = resp.Body.Close() }()
|
||||||
_, err = io.Copy(writer, resp.Body)
|
_, err = io.Copy(writer, resp.Body)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user