gpt4 book ai didi

google-app-engine - Blobstore 阅读器不会读取大图像

转载 作者:IT王子 更新时间:2023-10-29 02:06:02 25 4
gpt4 key购买 nike

我正在尝试从 Go 服务器端代码读取 Blobstore 中的图像。但是,如果图像很大(例如:0.5MB - 1.7MB),字节缓冲区的大部分变为 0,这会破坏图像。

如果我使用 serveUrl,图像可以工作,但在这种情况下这不是我的选择。

我的第一个想法是读取有大小限制,found this :

In addition to systemwide safety quotas, a limit applies specifically to the use of the Blobstore: the maximum size of Blobstore data that can be read by the application with one API call is 32 megabytes.

我阅读的图像远不及 32MB。

我用来从 Blobstore 读取的函数:

func BlobAsBase64(c appengine.Context, blobKey string) (*blobstore.BlobInfo, string, error) {
info, err := blobstore.Stat(c, appengine.BlobKey(blobKey))
if err != nil {
return nil, "", err
}

imageBuffer := make([]byte, info.Size)
reader := blobstore.NewReader(c, appengine.BlobKey(blobKey))
if _, err = reader.Read(imageBuffer); err != nil {
return nil, "", err
}

imageBase64 := base64.StdEncoding.EncodeToString(imageBuffer)

return info, imageBase64, nil
}

当我从 Blobstore 读取图像时,图像损坏的原因是什么?

最佳答案

我猜想这不起作用的原因是 reader.Read 方法在填充缓冲区之前返回。查看契约(Contract) io.Reader

Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n <= len(p)) and any error encountered. Even if Read returns n < len(p), it may use all of p as scratch space during the call. If some data is available but not len(p) bytes, Read conventionally returns what is available instead of waiting for more.

特别注意最后一句话。

尝试使用 ioutil.ReadAll 而不是 reader.Read(imageBuffer)这应该可以解决您的问题。

关于google-app-engine - Blobstore 阅读器不会读取大图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23789185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com