fix: Gemini 其他文件类型的支持(Base64URL)

This commit is contained in:
Yan
2024-12-29 10:11:39 +08:00
parent 9e5a7ed541
commit 2a15dfccea
2 changed files with 29 additions and 3 deletions

View File

@@ -204,13 +204,13 @@ func CovertGemini2OpenAI(textRequest dto.GeneralOpenAIRequest) (*GeminiChatReque
}, },
}) })
} else { } else {
_, format, base64String, err := service.DecodeBase64ImageData(part.ImageUrl.(dto.MessageImageUrl).Url) format, base64String, err := service.DecodeBase64FileData(part.ImageUrl.(dto.MessageImageUrl).Url)
if err != nil { if err != nil {
return nil, fmt.Errorf("decode base64 image data failed: %s", err.Error()) return nil, fmt.Errorf("decode base64 image data failed: %s", err.Error())
} }
parts = append(parts, GeminiPart{ parts = append(parts, GeminiPart{
InlineData: &GeminiInlineData{ InlineData: &GeminiInlineData{
MimeType: "image/" + format, MimeType: format,
Data: base64String, Data: base64String,
}, },
}) })

View File

@@ -5,11 +5,12 @@ import (
"encoding/base64" "encoding/base64"
"errors" "errors"
"fmt" "fmt"
"golang.org/x/image/webp"
"image" "image"
"io" "io"
"one-api/common" "one-api/common"
"strings" "strings"
"golang.org/x/image/webp"
) )
func DecodeBase64ImageData(base64String string) (image.Config, string, string, error) { func DecodeBase64ImageData(base64String string) (image.Config, string, string, error) {
@@ -31,6 +32,31 @@ func DecodeBase64ImageData(base64String string) (image.Config, string, string, e
return config, format, base64String, err return config, format, base64String, err
} }
func DecodeBase64FileData(base64String string) (string, string, error) {
var mimeType string
var idx int
idx = strings.Index(base64String, ",")
if idx == -1 {
_, file_type, base64, err := DecodeBase64ImageData(base64String)
return "image/" + file_type, base64, err
}
mimeType = base64String[:idx]
base64String = base64String[idx+1:]
idx = strings.Index(mimeType, ";")
if idx == -1 {
_, file_type, base64, err := DecodeBase64ImageData(base64String)
return "image/" + file_type, base64, err
}
mimeType = mimeType[:idx]
idx = strings.Index(mimeType, ":")
if idx == -1 {
_, file_type, base64, err := DecodeBase64ImageData(base64String)
return "image/" + file_type, base64, err
}
mimeType = mimeType[idx+1:]
return mimeType, base64String, nil
}
// GetImageFromUrl 获取图片的类型和base64编码的数据 // GetImageFromUrl 获取图片的类型和base64编码的数据
func GetImageFromUrl(url string) (mimeType string, data string, err error) { func GetImageFromUrl(url string) (mimeType string, data string, err error) {
resp, err := DoDownloadRequest(url) resp, err := DoDownloadRequest(url)