process.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package service
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io"
  6. "mime/multipart"
  7. "net/http"
  8. "os"
  9. )
  10. // Response 结构体用于存储响应体的内容
  11. type Response struct {
  12. Code int `json:"code"`
  13. Msg string `json:"msg"`
  14. Result string `json:"result"`
  15. Score float64 `json:"score"`
  16. }
  17. func AnalysisAudio(filename string, targetURL string) (resp Response, err error) {
  18. file, err := os.Open(filename)
  19. if err != nil {
  20. return
  21. }
  22. defer file.Close()
  23. // 创建一个缓冲区来存储表单数据
  24. var requestBody bytes.Buffer
  25. writer := multipart.NewWriter(&requestBody)
  26. // 创建一个表单字段,用于存储文件
  27. fileWriter, err := writer.CreateFormFile("audio", filename)
  28. if err != nil {
  29. return
  30. }
  31. // 将文件内容复制到表单字段中
  32. _, err = io.Copy(fileWriter, file)
  33. if err != nil {
  34. return
  35. }
  36. // 关闭表单写入器,以便写入末尾的边界
  37. writer.Close()
  38. // 创建POST请求,指定URL和请求体
  39. request, err := http.NewRequest("POST", targetURL, &requestBody)
  40. if err != nil {
  41. return
  42. }
  43. // 设置请求头,指定Content-Type为multipart/form-data
  44. request.Header.Set("Content-Type", writer.FormDataContentType())
  45. // 发送请求
  46. client := &http.Client{}
  47. response, err := client.Do(request)
  48. if err != nil {
  49. return
  50. }
  51. defer response.Body.Close()
  52. // 读取响应
  53. body := &bytes.Buffer{}
  54. _, err = io.Copy(body, response.Body)
  55. if err != nil {
  56. return
  57. }
  58. err = json.NewDecoder(body).Decode(&resp)
  59. if err != nil {
  60. return
  61. }
  62. return
  63. }