我需要在 Golang 中使用转录卷曲表达式,但是当我尝试转换时
curl --location-trusted -u <username>:<password> -H "label:123" \ -H "Expect:100-continue" \ -H "column_separator:," \ -H "columns: id, name, score" \ -T example1.csv -XPUT \ http://<fe_host>:<fe_http_port>/api/mydatabase/table1/_stream_load
我找不到在 http.NewRequest() 中发送 -T example1.csv 的正确且规范的方式
任何人都可以解释一下curl -T 文件是如何工作的吗? 我应该阅读内容并将其作为请求正文传递吗?
我应该这样做吗?
file_contents, err := os.ReadFile('example.csv'); if err != nil { return err }
r := bytes.NewReader(file_contents)
req, err := http.NewRequest("PUT", "http://someURL.com", r)
我尝试将文件发送到 starrocks 流加载器。
如果你想在 Go 中上传文件,你可以使用
curl -T
包来模仿 net/http
命令的行为。这是一个简单的演练:
读取文件:首先,您需要获取文件的内容。您可以使用
ioutil.ReadFile
将整个文件读入字节片。
创建请求: 接下来,使用
http.NewRequest
创建 HTTP 请求。对于上传文件,您通常会使用 PUT 方法,并将文件内容作为请求正文传递。
设置标头:不要忘记添加服务器可能需要的任何标头。例如,您可以设置内容类型、身份验证或其他参数的标头。
发送请求:最后,创建一个HTTP客户端,执行请求,并处理响应。
以下是如何在 Go 中将它们组合在一起的方法:
package main
import (
"bytes"
"io/ioutil"
"log"
"net/http"
)
func main() {
fileContents, err := ioutil.ReadFile("example1.csv")
if err != nil {
log.Fatalf("Error reading file: %v", err)
}
req, err := http.NewRequest("PUT", "http://<fe_host>:<fe_http_port>/api/mydatabase/table1/_stream_load", bytes.NewReader(fileContents))
if err != nil {
log.Fatalf("Error creating request: %v", err)
}
req.Header.Set("label", "123")
req.Header.Set("Expect", "100-continue")
req.Header.Set("column_separator", ",")
req.Header.Set("columns", "id, name, score")
req.SetBasicAuth("<username>", "<password>")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
log.Fatalf("Error sending request: %v", err)
}
defer resp.Body.Close()
log.Printf("Response status: %s", resp.Status)
}
只需将
<fe_host>
、<fe_http_port>
、<username>
和 <password>
与您的实际详细信息交换即可。此代码将像 curl -T
一样上传您的文件。