更改大文件上传逻辑

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

View File

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

View File

@ -388,32 +388,37 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
var resp *http.Response
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
if int64(chunk)+1 == chunks {
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 {
return nil, err
} else {
@ -432,12 +437,8 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
if err = writer.Close(); err != nil {
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.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)

View File

View File

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