我在用youtrack REST 写golang 客户端我写过最多的API 路径。但是在将文件附加到 Issue 时遇到了问题。所以,这里有一个小而好的文档https://www.jetbrains.com/help/youtrack/devportal/api-usecase-attach-files.html
使用此文档页面和其他文档页面中的命令与 curl(通过终端)一起使用 我是 golang 的新手,但必须用这种语言编写。
func createForm(form map[string]string) (string, io.Reader, error) {
body := new(bytes.Buffer)
mp := multipart.NewWriter(body)
defer mp.Close()
for key, val := range form {
if strings.HasPrefix(val, "@") {
val = val[1:]
file, err := os.Open(val)
if err != nil {
return "", nil, err
}
defer file.Close()
part, err := mp.CreateFormFile(key, val)
if err != nil {
return "", nil, err
}
io.Copy(part, file)
} else {
mp.WriteField(key, val)
}
}
return mp.FormDataContentType(), body, nil
}
func AttachFileToIssue(path string, issueID string) {
form := map[string]string{"image": "@image.jpeg", "key": "KEY"}
_, body, err := createForm(form)
if err != nil {
panic(err)
}
req, err := http.NewRequest("POST", youTrackUrl+"/api/issues/"+issueID+"/attachments?fields=id,name", body)
if err != nil {
// handle err
}
req.Header.Set("Authorization", "Bearer "+youTrackToken)
req.Header.Set("Content-Type", "multipart/form-data")
resp, err := http.DefaultClient.Do(req)
if err != nil {
// handle err
}
fmt.Println(resp)
if resp.StatusCode == http.StatusOK {
bodyBytes, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
fmt.Println(bodyString)
}
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
}
}(resp.Body)
}
我用 wireshark 检查出了什么问题,问题出在 mime 部分,缺少一些东西。
开心每一天1111
相关分类