优化大文件上传内存占用

This commit is contained in:
eatMoreApple 2021-05-06 18:22:38 +08:00
parent 6bfd2a6f52
commit e63e475dc6
2 changed files with 450 additions and 449 deletions

View File

@ -254,9 +254,9 @@ func TestFriendHelper(t *testing.T) {
t.Error(err) t.Error(err)
return return
} }
f, _ := os.Open("webwxgetmsgimg.jpg") f, _ := os.Open("run")
defer f.Close() defer f.Close()
msg, err := fh.SendImage(f) msg, err := fh.SendFile(f)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return

View File

@ -1,10 +1,12 @@
package openwechat package openwechat
import ( import (
"bufio"
"bytes" "bytes"
"crypto/md5" "crypto/md5"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io"
"mime/multipart" "mime/multipart"
"net/http" "net/http"
"net/http/cookiejar" "net/http/cookiejar"
@ -264,12 +266,14 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
return nil, err return nil, err
} }
buffer := bytes.Buffer{} reader := bufio.NewReader(file)
if _, err := buffer.ReadFrom(file); err != nil {
h := md5.New()
if _, err = io.Copy(h, reader); err != nil {
return nil, err return nil, err
} }
data := buffer.Bytes()
fileMd5 := fmt.Sprintf("%x", md5.Sum(data)) fileMd5 := fmt.Sprintf("%x", h.Sum(nil))
sate, err := file.Stat() sate, err := file.Stat()
if err != nil { if err != nil {
@ -361,12 +365,9 @@ func (c *Client) WebWxUploadMediaByChunk(file *os.File, request *BaseRequest, in
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 {
var chunkData []byte chunkData := make([]byte, chunkSize)
// 判断是不是最后一次 if _, err := file.Read(chunkData); err != nil && err != io.EOF {
if !isLastTime { return nil, err
chunkData = data[int64(chunk)*chunkSize : (int64(chunk)+1)*chunkSize]
} else {
chunkData = data[int64(chunk)*chunkSize:]
} }
if _, err = w.Write(chunkData); err != nil { if _, err = w.Write(chunkData); err != nil {
return nil, err return nil, err