Forráskód Böngészése

优化代码,新增文件判断

dxc 1 éve
szülő
commit
d898a1bce2
9 módosított fájl, 51 hozzáadás és 3 törlés
  1. 1 0
      go.mod
  2. 2 0
      go.sum
  3. 26 3
      job/job.go
  4. BIN
      test/1
  5. BIN
      test/2
  6. BIN
      test/3
  7. BIN
      test/4
  8. BIN
      test/5
  9. 22 0
      test/mimetype_test.go

+ 1 - 0
go.mod

@@ -15,6 +15,7 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
 	github.com/fatih/color v1.16.0 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.4 // indirect
 	github.com/go-logr/logr v1.3.0 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/gofrs/flock v0.8.1 // indirect

+ 2 - 0
go.sum

@@ -15,6 +15,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
 github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
+github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I=
+github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s=
 github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=

+ 26 - 3
job/job.go

@@ -6,6 +6,7 @@ import (
 	"bytes"
 	"encoding/json"
 	"errors"
+	"github.com/gabriel-vasile/mimetype"
 	"github.com/google/uuid"
 	"github.com/zeromicro/go-zero/core/logx"
 	"io"
@@ -16,6 +17,10 @@ import (
 	"sync"
 )
 
+var (
+	StopTranscoderError = errors.New("stop transcoder")
+)
+
 type CallbackReq struct {
 	types.CallbackRequest
 	FailNum int `json:"fail_num"`
@@ -38,13 +43,13 @@ func AutoTranscoder(ctx *svc.ServiceContext) {
 		}
 		//业务处理
 		resp, err := transcoder(ctx, &req.CallbackRequest)
-		logx.Info("转码结果 data:", resp)
+		logx.Info("转码结果 data:", resp, err)
 		if err != nil {
 			logx.Error(err)
 			_ = sdk.Delete(key)
 			//重新放入队列
 			req.FailNum++
-			if req.FailNum < 10 {
+			if err != StopTranscoderError && req.FailNum < 3 {
 				b, _ := json.Marshal(&req)
 				logx.Info("转码失败!重新放入队列 data:", string(b))
 				_ = sdk.Set(uuid.NewString(), string(b))
@@ -70,7 +75,7 @@ func AutoTranscoder(ctx *svc.ServiceContext) {
 
 func transcoder(svcCtx *svc.ServiceContext, req *types.CallbackRequest) (resp *types.OriginDataResponse, err error) {
 	if req.Path == "" {
-		err = errors.New("path is empty")
+		err = StopTranscoderError
 		return
 	}
 	resp = &types.OriginDataResponse{OriginData: req.OriginData}
@@ -102,6 +107,24 @@ func transcoder(svcCtx *svc.ServiceContext, req *types.CallbackRequest) (resp *t
 		logx.Errorf("读取文件失败 error:", err.Error())
 		return
 	}
+	//判断文件类型,如果不是语音则返回
+	var isAudio bool
+	mtype, _ := mimetype.DetectReader(silkFile)
+	if mtype.Is("application/octet-stream") {
+		var buf = make([]byte, 5)
+		if _, err = silkFile.Read(buf); err == nil {
+			if bytes.Equal(buf, []byte{2, 35, 33, 83, 73, 76, 75, 95, 86, 51}) {
+				isAudio = true
+			}
+		}
+		//读取的游标回到0
+		silkFile.Seek(0, 0)
+	}
+	if !isAudio {
+		logx.Errorf("文件类型不是语音 error:", mtype.String())
+		err = StopTranscoderError
+		return
+	}
 	// 转码
 	wavPath, pcmPath := silk.TransSilkToWav(silkPath)
 	wavFile, err := os.Open(wavPath)

BIN
test/1


BIN
test/2


BIN
test/3


BIN
test/4


BIN
test/5


+ 22 - 0
test/mimetype_test.go

@@ -0,0 +1,22 @@
+package test
+
+import (
+	"fmt"
+	"github.com/gabriel-vasile/mimetype"
+	"os"
+	"testing"
+)
+
+func TestName(t *testing.T) {
+	mtype, _ := mimetype.DetectFile("./1")
+
+	t.Log(mtype.String(), mtype.Extension(), mtype.Is("application/octet-stream"))
+	for i := 1; i <= 5; i++ {
+		file, _ := os.Open(fmt.Sprintf("./%d", i))
+		var buf = make([]byte, 100)
+		n, _ := file.Read(buf)
+		t.Log(n, buf)
+		file.Close()
+	}
+
+}