1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

client: avoid ReadAll in image ocr

This commit is contained in:
wdvxdr 2022-02-27 16:52:57 +08:00
parent ca4580dad5
commit 76539e425d
No known key found for this signature in database
GPG Key ID: 703F8C071DE7A1B6

View File

@ -1,8 +1,6 @@
package client package client
import ( import (
"bytes"
"crypto/md5"
"encoding/hex" "encoding/hex"
"io" "io"
"math/rand" "math/rand"
@ -211,7 +209,7 @@ func (c *QQClient) ImageOcr(img interface{}) (*OcrResponse, error) {
case *message.GroupImageElement: case *message.GroupImageElement:
url = e.Url url = e.Url
if b, err := utils.HTTPGetReadCloser(e.Url, ""); err == nil { if b, err := utils.HTTPGetReadCloser(e.Url, ""); err == nil {
if url, err = c.uploadOcrImage(b); err != nil { if url, err = c.uploadOcrImage(b, e.Size, e.Md5); err != nil {
url = e.Url url = e.Url
} }
_ = b.Close() _ = b.Close()
@ -316,7 +314,7 @@ func (c *QQClient) buildGroupImageDownloadPacket(fileId, groupCode int64, fileMd
return c.uniPacket("ImgStore.GroupPicDown", payload) return c.uniPacket("ImgStore.GroupPicDown", payload)
} }
func (c *QQClient) uploadOcrImage(img io.Reader) (string, error) { func (c *QQClient) uploadOcrImage(img io.Reader, size int32, sum []byte) (string, error) {
r := make([]byte, 16) r := make([]byte, 16)
rand.Read(r) rand.Read(r)
ext, _ := proto.Marshal(&highway2.CommFileExtReq{ ext, _ := proto.Marshal(&highway2.CommFileExtReq{
@ -324,13 +322,11 @@ func (c *QQClient) uploadOcrImage(img io.Reader) (string, error) {
Uuid: binary.GenUUID(r), Uuid: binary.GenUUID(r),
}) })
h := md5.New()
buf, _ := io.ReadAll(io.TeeReader(img, h))
rsp, err := c.highwaySession.UploadBDH(highway.BdhInput{ rsp, err := c.highwaySession.UploadBDH(highway.BdhInput{
CommandID: 76, CommandID: 76,
Body: bytes.NewReader(buf), Body: img,
Size: int64(len(buf)), Size: int64(size),
Sum: h.Sum(nil), Sum: sum,
Ticket: c.highwaySession.SigSession, Ticket: c.highwaySession.SigSession,
Ext: ext, Ext: ext,
Encrypt: false, Encrypt: false,