package handle import ( "ai_scheduler/internal/data/constants" "ai_scheduler/internal/entitys" "ai_scheduler/internal/pkg/l_request" "errors" "fmt" "io" "net/http" "path/filepath" "strings" "github.com/gabriel-vasile/mimetype" ) // HandleRecognizeFile 这里的目的是无论将什么类型的file都转为二进制格式 // 判断文件大小 // 判断文件类型 // 判断文件是否合法 func HandleRecognizeFile(files *entitys.RecognizeFile) { //Todo 仲云 return } // 下载文件并返回二进制数据、MIME 类型 func downloadFile(fileUrl string) (fileBytes []byte, contentType string, err error) { if len(fileUrl) == 0 { return } req := l_request.Request{ Method: "GET", Url: fileUrl, Headers: map[string]string{ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Accept": "image/webp,image/apng,image/*,*/*;q=0.8", }, } res, err := req.Send() if err != nil { return } var ex bool if contentType, ex = res.Headers["Content-Type"]; !ex { err = errors.New("Content-Type不存在") return } if res.StatusCode != http.StatusOK { err = fmt.Errorf("server returned non-200 status: %d", res.StatusCode) } fileBytes = res.Content return fileBytes, contentType, nil } // detectFileType 判断文件类型 func detectFileType(file io.ReadSeeker, filename string) constants.FileType { // 1. 读取文件头检测 MIME buffer := make([]byte, 512) n, _ := file.Read(buffer) file.Seek(0, io.SeekStart) // 重置读取位置 detectedMIME := mimetype.Detect(buffer[:n]).String() for fileType, items := range constants.FileTypeMappings { for _, item := range items { if !strings.HasPrefix(item, ".") && item == detectedMIME { return fileType } } } // 2. 备用:通过扩展名检测 ext := strings.ToLower(filepath.Ext(filename)) for fileType, items := range constants.FileTypeMappings { for _, item := range items { if strings.HasPrefix(item, ".") && item == ext { return fileType } } } return constants.FileTypeUnknown }