diff --git a/CHANGELOG.md b/CHANGELOG.md index ad9b680..437a6a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## v1.14.1 + +- feat(api): UploadFile support uploads binary file + ## v1.14.0 - refactor(im): build reply and update message with standalone methods diff --git a/api_upload.go b/api_upload.go index b7c018d..01246fd 100644 --- a/api_upload.go +++ b/api_upload.go @@ -29,10 +29,11 @@ type UploadImageResponse struct { // UploadFileRequest . type UploadFileRequest struct { - FileType string `json:"-"` - FileName string `json:"-"` - Duration int `json:"-"` - Path string `json:"-"` + FileType string `json:"-"` + FileName string `json:"-"` + Duration int `json:"-"` + Path string `json:"-"` + Reader io.Reader `json:"-"` } // UploadFileResponse . @@ -105,11 +106,18 @@ func (bot Bot) UploadImageObject(img image.Image) (*UploadImageResponse, error) // UploadFile uploads file to Lark server func (bot Bot) UploadFile(req UploadFileRequest) (*UploadFileResponse, error) { - file, err := os.Open(req.Path) - if err != nil { - return nil, err + var content io.Reader + if req.Reader == nil { + file, err := os.Open(req.Path) + if err != nil { + return nil, err + } + defer file.Close() + content = file + } else { + content = req.Reader + req.Path = req.FileName } - defer file.Close() body := &bytes.Buffer{} writer := multipart.NewWriter(body) @@ -122,7 +130,7 @@ func (bot Bot) UploadFile(req UploadFileRequest) (*UploadFileResponse, error) { if err != nil { return nil, err } - _, err = io.Copy(part, file) + _, err = io.Copy(part, content) if err != nil { return nil, err } diff --git a/api_upload_test.go b/api_upload_test.go index 7208a41..8fa2417 100644 --- a/api_upload_test.go +++ b/api_upload_test.go @@ -3,6 +3,7 @@ package lark import ( "image/jpeg" "os" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -41,3 +42,19 @@ func TestUploadFile(t *testing.T) { assert.NotEmpty(t, resp.Data.FileKey) } } + +func TestUploadFile_Binary(t *testing.T) { + resp, err := bot.UploadFile(UploadFileRequest{ + FileType: "stream", + FileName: "test-data.csv", + Reader: strings.NewReader(`Name,Age,Location + Foo,25,Sleman + Bar,23,Sidoarjo + Baz,27,Bantul`), + }) + if assert.NoError(t, err) { + assert.Zero(t, resp.Code) + t.Log(resp.Data.FileKey) + assert.NotEmpty(t, resp.Data.FileKey) + } +}