package service import ( "bytes" "encoding/json" "io" "mime/multipart" "net/http" "os" ) // Response 结构体用于存储响应体的内容 type Response struct { Code int `json:"code"` Msg string `json:"msg"` Result string `json:"result"` Score float64 `json:"score"` } func AnalysisAudio(filename string, targetURL string) (resp Response, err error) { file, err := os.Open(filename) if err != nil { return } defer file.Close() // 创建一个缓冲区来存储表单数据 var requestBody bytes.Buffer writer := multipart.NewWriter(&requestBody) // 创建一个表单字段,用于存储文件 fileWriter, err := writer.CreateFormFile("audio", filename) if err != nil { return } // 将文件内容复制到表单字段中 _, err = io.Copy(fileWriter, file) if err != nil { return } // 关闭表单写入器,以便写入末尾的边界 writer.Close() // 创建POST请求,指定URL和请求体 request, err := http.NewRequest("POST", targetURL, &requestBody) if err != nil { return } // 设置请求头,指定Content-Type为multipart/form-data request.Header.Set("Content-Type", writer.FormDataContentType()) // 发送请求 client := &http.Client{} response, err := client.Do(request) if err != nil { return } defer response.Body.Close() // 读取响应 body := &bytes.Buffer{} _, err = io.Copy(body, response.Body) if err != nil { return } err = json.NewDecoder(body).Decode(&resp) if err != nil { return } return }