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
|
}
|