更改大文件上传逻辑

This commit is contained in:
eatMoreApple 2021-04-29 21:13:10 +08:00
parent fac0ede488
commit 3c7fec07f3
6 changed files with 1006 additions and 1021 deletions

View File

@ -5,7 +5,7 @@
[文档](doc.md) [文档](doc/doc.md)

View File

@ -239,7 +239,7 @@ func TestHotLogin(t *testing.T) {
} }
func TestFriendHelper(t *testing.T) { func TestFriendHelper(t *testing.T) {
bot := defaultBot() bot := defaultBot(Desktop)
if err := bot.HotLogin(NewJsonFileHotReloadStorage("2.json"), true); err != nil { if err := bot.HotLogin(NewJsonFileHotReloadStorage("2.json"), true); err != nil {
t.Error(err) t.Error(err)
return return
@ -254,11 +254,9 @@ func TestFriendHelper(t *testing.T) {
t.Error(err) t.Error(err)
return return
} }
f, _ := os.Open("webwxgetmsgimg.jpeg") f, _ := os.Open("webwxgetmsgimg.jpg")
//f, _ := os.Open("2.jpeg")
defer f.Close() defer f.Close()
msg, err := fh.SendImage(f) msg, err := fh.SendImage(f)
//msg, err := fh.SendText("hh")
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return

View File

@ -2,7 +2,6 @@ package openwechat
import ( import (
"errors" "errors"
"fmt"
"os" "os"
) )
@ -220,8 +219,7 @@ func (c *Caller) WebWxSendImageMsg(file *os.File, request *BaseRequest, info *Lo
return nil, resp.Err() return nil, resp.Err()
} }
defer resp.Body.Close() defer resp.Body.Close()
data, _ := resp.ReadAll()
fmt.Println(string(data))
var item struct { var item struct {
BaseResponse BaseResponse BaseResponse BaseResponse
MediaId string MediaId string

View File

@ -388,32 +388,37 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
var resp *http.Response var resp *http.Response
for chunk := 0; int64(chunk) < chunks; chunk++ { for chunk := 0; int64(chunk) < chunks; chunk++ {
content := map[string]interface{}{
"id": "WU_FILE_0",
"name": file.Name(),
"type": contentType,
"lastModifiedDate": sate.ModTime().Format(TimeFormat),
"size": sate.Size(),
"mediatype": mediaType,
"webwx_data_ticket": webWxDataTicket,
"pass_ticket": info.PassTicket,
"chunks": chunks,
"chunk": chunk,
}
body, err := ToBuffer(content)
if err != nil {
return nil, err
}
writer := multipart.NewWriter(body)
if err = writer.WriteField("uploadmediarequest", string(uploadMediaRequestByte)); err != nil {
return nil, err
}
var isLastTime bool var isLastTime bool
if int64(chunk)+1 == chunks { if int64(chunk)+1 == chunks {
isLastTime = true isLastTime = true
} }
content := map[string]string{
"id": "WU_FILE_0",
"name": file.Name(),
"type": contentType,
"lastModifiedDate": sate.ModTime().Format(TimeFormat),
"size": strconv.FormatInt(sate.Size(), 10),
"mediatype": mediaType,
"webwx_data_ticket": webWxDataTicket,
"pass_ticket": info.PassTicket,
"chunks": strconv.FormatInt(chunks, 10),
"chunk": strconv.Itoa(chunk),
}
var formBuffer bytes.Buffer
writer := multipart.NewWriter(&formBuffer)
if err = writer.WriteField("uploadmediarequest", string(uploadMediaRequestByte)); err != nil {
return nil, err
}
for k, v := range content {
if err := writer.WriteField(k, v); err != nil {
return nil, err
}
}
if w, err := writer.CreateFormFile("filename", file.Name()); err != nil { if w, err := writer.CreateFormFile("filename", file.Name()); err != nil {
return nil, err return nil, err
} else { } else {
@ -432,12 +437,8 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
if err = writer.Close(); err != nil { if err = writer.Close(); err != nil {
return nil, err return nil, err
} }
req, _ := http.NewRequest(http.MethodPost, path.String(), body) req, _ := http.NewRequest(http.MethodPost, path.String(), &formBuffer)
req.Header.Set("Content-Type", ct) req.Header.Set("Content-Type", ct)
//req.Header.Add("Referer", c.baseUrl)
//req.Header.Add("Origin", c.baseUrl)
//// Host: file.wx2.qq.com
//req.Header.Add("Host", "file.wx2.qq.com")
// 发送数据 // 发送数据
resp, err = c.Do(req) resp, err = c.Do(req)

View File

View File

@ -34,27 +34,13 @@ type JsonFileHotReloadStorage struct {
// 将信息写入json文件 // 将信息写入json文件
func (f *JsonFileHotReloadStorage) Dump(cookies map[string][]*http.Cookie, req *BaseRequest, info *LoginInfo) error { func (f *JsonFileHotReloadStorage) Dump(cookies map[string][]*http.Cookie, req *BaseRequest, info *LoginInfo) error {
var (
file *os.File
err error
)
_, err = os.Stat(f.filename)
if err != nil {
if os.IsNotExist(err) {
file, err = os.Create(f.filename)
if err != nil {
return err
}
}
}
if file == nil { file, err := os.OpenFile(f.filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.ModePerm)
file, err = os.Open(f.filename)
}
if err != nil { if err != nil {
return err return err
} }
defer file.Close() defer file.Close()
f.Cookie = cookies f.Cookie = cookies
@ -72,6 +58,7 @@ func (f *JsonFileHotReloadStorage) Dump(cookies map[string][]*http.Cookie, req *
// 从文件中读取信息 // 从文件中读取信息
func (f *JsonFileHotReloadStorage) Load() error { func (f *JsonFileHotReloadStorage) Load() error {
file, err := os.Open(f.filename) file, err := os.Open(f.filename)
if err != nil { if err != nil {
return err return err
} }
@ -80,7 +67,8 @@ func (f *JsonFileHotReloadStorage) Load() error {
if _, err := buffer.ReadFrom(file); err != nil { if _, err := buffer.ReadFrom(file); err != nil {
return err return err
} }
return json.Unmarshal(buffer.Bytes(), f) err = json.Unmarshal(buffer.Bytes(), f)
return err
} }
func (f *JsonFileHotReloadStorage) GetCookie() map[string][]*http.Cookie { func (f *JsonFileHotReloadStorage) GetCookie() map[string][]*http.Cookie {