diff --git a/ragflow/document.go b/ragflow/document.go index 2fee990..823f26e 100644 --- a/ragflow/document.go +++ b/ragflow/document.go @@ -5,11 +5,11 @@ package ragflow import ( "bytes" "context" + "mime/multipart" "strings" "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/errors/gerror" - "github.com/gogf/gf/v2/frame/g" ) // 数据集内文件管理 @@ -158,16 +158,34 @@ func (c *Client) UploadDocumentFromText(ctx context.Context, datasetId, content, // 构造URL url := c.BaseURL + "/api/v1/datasets/" + datasetId + "/documents" - // 使用gclient上传文本作为文件 + // 创建multipart writer + body := &bytes.Buffer{} + writer := multipart.NewWriter(body) + + // 添加文件字段 + part, err := writer.CreateFormFile("file", filename) + if err != nil { + return "", gerror.Wrap(err, "创建form file失败") + } + + // 写入内容 + if _, err = part.Write([]byte(content)); err != nil { + return "", gerror.Wrap(err, "写入文件内容失败") + } + + // 关闭multipart writer + if err = writer.Close(); err != nil { + return "", gerror.Wrap(err, "关闭multipart writer失败") + } + + // 发送请求 client := c.HTTPClient.Clone() client.SetHeader("Authorization", "Bearer "+c.APIKey) + client.SetHeader("Content-Type", writer.FormDataContentType()) - // 使用ContentType方法上传multipart表单 - resp, err := client.Post(ctx, url, g.Map{ - "file": bytes.NewReader([]byte(content)), - }) + resp, err := client.Post(ctx, url, body.Bytes()) if err != nil { - return "", err + return "", gerror.Wrap(err, "上传文档请求失败") } defer resp.Close()