优化大文件上传内存占用
This commit is contained in:
parent
6bfd2a6f52
commit
e63e475dc6
@ -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
|
||||||
|
21
client.go
21
client.go
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user