Skip to content

Commit

Permalink
update file upload (#488)
Browse files Browse the repository at this point in the history
  • Loading branch information
eatmoreapple authored Apr 30, 2024
1 parent 20cc8b8 commit 99cb39c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 20 deletions.
16 changes: 5 additions & 11 deletions caller.go
Original file line number Diff line number Diff line change
Expand Up @@ -275,21 +275,19 @@ func (c *Caller) WebWxOplog(ctx context.Context, opt *CallerWebWxOplogOptions) e
type CallerUploadMediaOptions struct {
FromUserName string
ToUserName string
File *os.File
BaseRequest *BaseRequest
LoginInfo *LoginInfo
}

func (c *Caller) UploadMedia(ctx context.Context, opt *CallerUploadMediaOptions) (*UploadResponse, error) {
func (c *Caller) UploadMedia(ctx context.Context, file *os.File, opt *CallerUploadMediaOptions) (*UploadResponse, error) {
// 首先尝试上传图片
clientWebWxUploadMediaByChunkOpt := &ClientWebWxUploadMediaByChunkOptions{
FromUserName: opt.FromUserName,
ToUserName: opt.ToUserName,
File: opt.File,
BaseRequest: opt.BaseRequest,
LoginInfo: opt.LoginInfo,
}
resp, err := c.Client.WebWxUploadMediaByChunk(ctx, clientWebWxUploadMediaByChunkOpt)
resp, err := c.Client.WebWxUploadMediaByChunk(ctx, file, clientWebWxUploadMediaByChunkOpt)
// 无错误上传成功之后获取请求结果,判断结果是否正常
if err != nil {
return nil, err
Expand Down Expand Up @@ -331,11 +329,10 @@ func (c *Caller) WebWxSendImageMsg(ctx context.Context, opt *CallerWebWxSendImag
uploadMediaOption := &CallerUploadMediaOptions{
FromUserName: opt.FromUserName,
ToUserName: opt.ToUserName,
File: file,
BaseRequest: opt.BaseRequest,
LoginInfo: opt.LoginInfo,
}
resp, err := c.UploadMedia(ctx, uploadMediaOption)
resp, err := c.UploadMedia(ctx, file, uploadMediaOption)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -370,11 +367,10 @@ func (c *Caller) WebWxSendFile(ctx context.Context, opt *CallerWebWxSendFileOpti
uploadMediaOption := &CallerUploadMediaOptions{
FromUserName: opt.FromUserName,
ToUserName: opt.ToUserName,
File: file,
BaseRequest: opt.BaseRequest,
LoginInfo: opt.LoginInfo,
}
resp, err := c.UploadMedia(ctx, uploadMediaOption)
resp, err := c.UploadMedia(ctx, file, uploadMediaOption)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -402,12 +398,10 @@ func (c *Caller) WebWxSendVideoMsg(ctx context.Context, opt *CallerWebWxSendAppM
uploadMediaOption := &CallerUploadMediaOptions{
FromUserName: opt.FromUserName,
ToUserName: opt.ToUserName,
File: file,
BaseRequest: opt.BaseRequest,
LoginInfo: opt.LoginInfo,
}

resp, err := c.UploadMedia(ctx, uploadMediaOption)
resp, err := c.UploadMedia(ctx, file, uploadMediaOption)
if err != nil {
return nil, err
}
Expand Down
17 changes: 8 additions & 9 deletions client.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,31 +467,30 @@ func (c *Client) WebWxGetHeadImg(ctx context.Context, user *User) (*http.Respons
type ClientWebWxUploadMediaByChunkOptions struct {
FromUserName string
ToUserName string
File *os.File
BaseRequest *BaseRequest
LoginInfo *LoginInfo
}

// WebWxUploadMediaByChunk 分块上传文件
// TODO 优化掉这个函数
func (c *Client) WebWxUploadMediaByChunk(ctx context.Context, opt *ClientWebWxUploadMediaByChunkOptions) (*http.Response, error) {
func (c *Client) WebWxUploadMediaByChunk(ctx context.Context, file *os.File, opt *ClientWebWxUploadMediaByChunkOptions) (*http.Response, error) {
// 获取文件上传的类型
contentType, err := GetFileContentType(opt.File)
contentType, err := GetFileContentType(file)
if err != nil {
return nil, err
}
if _, err = opt.File.Seek(io.SeekStart, 0); err != nil {
if _, err = file.Seek(io.SeekStart, 0); err != nil {
return nil, err
}

// 获取文件的md5
h := md5.New()
if _, err = io.Copy(h, opt.File); err != nil {
if _, err = io.Copy(h, file); err != nil {
return nil, err
}
fileMd5 := hex.EncodeToString(h.Sum(nil))

sate, err := opt.File.Stat()
sate, err := file.Stat()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -559,7 +558,7 @@ func (c *Client) WebWxUploadMediaByChunk(ctx context.Context, opt *ClientWebWxUp
content["chunks"] = strconv.FormatInt(chunks, 10)
}

if _, err = opt.File.Seek(0, 0); err != nil {
if _, err = file.Seek(0, 0); err != nil {
return nil, err
}

Expand Down Expand Up @@ -587,12 +586,12 @@ func (c *Client) WebWxUploadMediaByChunk(ctx context.Context, opt *ClientWebWxUp
}
}

w, err := writer.CreateFormFile("filename", opt.File.Name())
w, err := writer.CreateFormFile("filename", file.Name())
if err != nil {
return nil, err
}

n, err := opt.File.Read(chunkBuff)
n, err := file.Read(chunkBuff)

if err != nil && err != io.EOF {
return nil, err
Expand Down

0 comments on commit 99cb39c

Please sign in to comment.