go - 用于谷歌云存储的 Golang SDK:分段下载
问题描述
使用 GoLang SDK 进行谷歌云存储。
找不到如何分块下载文件。
解决方案
Google Cloud 文档说要从 Cloud Storage 下载对象,您应该使用以下内容:
rc, err := client.Bucket(bucket).Object(object).NewReader(ctx)
if err != nil {
return nil, err
}
defer rc.Close()
data, err := ioutil.ReadAll(rc)
if err != nil {
return nil, err
}
return data, nil
来源:https ://cloud.google.com/storage/docs/downloading-objects#storage-download-object-code_sample
鉴于他们的 SDK 返回一个io.Reader
,您无需担心用于能够以块的形式引用下载的底层方法(尽管快速浏览他们的源代码,它只是实现了http.NewRequest
,它可以满足您的要求,使用相同的逻辑)。
它似乎没有从他们的示例中“分块”的原因是因为使用ioutil.ReadAll
,虽然对于简单的用例非常有用,但它会将所有Reader
s 数据提取到内存中(这意味着它还必须等待数据变得可用)。
为了更好地理解如何处理Reader
in 步骤,我建议查看https://tour.golang.org/methods/21了解io.Reader
如何更有效地使用它。
推荐阅读
- c# - Web API:分别下载多个文件
- java - 带有 Java8 的 ClosableHttpClient 导致处理异常:javax.net.ssl.SSLException: Unsupported record version Unknown
- javascript - 如何在php中检查控制台上的变量值?
- android - 套接字发送缓冲区队列卡在三星中
- python - `in` 对 `__contains__` 有多少优化?
- python - 如何将复杂数组从 python 导出到 IDL 的 tiff 文件
- android - 基于多个实时数据值的 Android 逻辑
- sql-server - SQL Server 识别匹配的借方和贷方
- asterisk - 无法让 RTPEngine 与 Kamailio 和 Asterisk 一起使用
- ios - 拍摄照片后,Ionic cordova 相机插件间歇性崩溃(使用 Firebase 图像上传)