mirror of
https://github.com/linux-do/new-api.git
synced 2025-09-20 09:16:37 +08:00
feat: 优化vision计费逻辑
This commit is contained in:
parent
a3921ea54d
commit
1ee8edcfd4
@ -68,17 +68,29 @@ func DecodeUrlImageData(imageUrl string) (image.Config, string, error) {
|
|||||||
SysLog(fmt.Sprintf("fail to get image from url: %s", err.Error()))
|
SysLog(fmt.Sprintf("fail to get image from url: %s", err.Error()))
|
||||||
return image.Config{}, "", err
|
return image.Config{}, "", err
|
||||||
}
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
|
||||||
// 限制读取的字节数,防止下载整个图片
|
var readData []byte
|
||||||
limitReader := io.LimitReader(response.Body, 1024*20)
|
for _, limit := range []int64{1024 * 8, 1024 * 24, 1024 * 64} {
|
||||||
//data, err := io.ReadAll(limitReader)
|
SysLog(fmt.Sprintf("try to decode image config with limit: %d", limit))
|
||||||
//if err != nil {
|
|
||||||
// log.Fatal(err)
|
// 从response.Body读取更多的数据直到达到当前的限制
|
||||||
//}
|
additionalData := make([]byte, limit-int64(len(readData)))
|
||||||
//log.Printf("%x", data)
|
n, _ := io.ReadFull(response.Body, additionalData)
|
||||||
config, format, err := getImageConfig(limitReader)
|
readData = append(readData, additionalData[:n]...)
|
||||||
response.Body.Close()
|
|
||||||
return config, format, err
|
// 使用io.MultiReader组合已经读取的数据和response.Body
|
||||||
|
limitReader := io.MultiReader(bytes.NewReader(readData), response.Body)
|
||||||
|
|
||||||
|
var config image.Config
|
||||||
|
var format string
|
||||||
|
config, format, err = getImageConfig(limitReader)
|
||||||
|
if err == nil {
|
||||||
|
return config, format, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return image.Config{}, "", err // 返回最后一个错误
|
||||||
}
|
}
|
||||||
|
|
||||||
func getImageConfig(reader io.Reader) (image.Config, string, error) {
|
func getImageConfig(reader io.Reader) (image.Config, string, error) {
|
||||||
|
Loading…
Reference in New Issue
Block a user