fix: Gemini 其他文件类型的支持(Base64URL)
This commit is contained in:
@@ -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,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user