OSS Go SDK提供了丰富的文件下载接口,用户可以通过以下方式从OSS中下载文件:
提示:
- 下载的示例代码在sample/get_object.go。
import (
"fmt"
"io/ioutil"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
body, err := bucket.GetObject("my-object")
if err != nil {
// HandleError(err)
}
data, err := ioutil.ReadAll(body)
if err != nil {
// HandleError(err)
}
body.Close()
fmt.Println("data:", string(data))
注意:
- io.ReadCloser数据读取完毕后,需要调用Close关闭。
import (
"bytes"
"io"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
body, err := bucket.GetObject("my-object")
if err != nil {
// HandleError(err)
}
buf := new(bytes.Buffer)
io.Copy(buf, body)
body.Close()
import (
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
body, err := bucket.GetObject("my-object")
if err != nil {
// HandleError(err)
}
defer body.Close()
fd, err := os.OpenFile("LocalFile", os.O_WRONLY|os.O_CREATE, 0660)
if err != nil {
// HandleError(err)
}
defer fd.Close()
io.Copy(fd, body)
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
err = bucket.GetObjectToFile("my-object", "LocalFile")
if err != nil {
// HandleError(err)
}
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
err = bucket.DownloadFile("my-object", "LocalFile", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
if err != nil {
// HandleError(err)
}
注意:
- SDK会将下载的中间状态信息记录在cp文件中,所以要确保用户对cpt文 件有写权限
- cpt文件记录了下载的中间状态信息并自带了校验,用户不能去编辑它,如 果cpt文件损坏则重新下载文件
- 如果下载过程中待下载的Object发生了改变(ETag改变),或者part文件丢 失或被修改,则重新下载文件
提示:
- 指定断点续传checkpoint文件路径使用oss.Checkpoint(true, "your-cp-file.cp")
- 使用bucket.DownloadFile(objectKey, localFile, 100*1024),默认不使用分片并发下载、不启动断点续传
参数 | 说明 |
IfModifiedSince | 如果指定的时间早于实际修改时间,则正常传送。否则返回错误。 |
IfUnmodifiedSince | 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件;否则返回错误。 |
IfMatch | 如果传入期望的ETag和object的 ETag匹配,则正常传输;否则返回错误。 |
IfNoneMatch | 如果传入的ETag值和Object的ETag不匹配,则正常传输;否则返回错误。 |
import "time"
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
date := time.Date(2015, time.November, 10, 23, 0, 0, 0, time.UTC)
// 限定条件不满足,不下载文件
err = bucket.GetObjectToFile("my-object", "LocalFile", oss.IfModifiedSince(date))
if err == nil {
// HandleError(err)
}
// 满足限定条件,下载文件
err = bucket.GetObjectToFile("my-object", "LocalFile", oss.IfUnmodifiedSince(date))
if err != nil {
// HandleError(err)
}
提示:
- ETag的值可以通过Bucket.GetObjectDetailedMeta获取。
- Bucket.GetObject,Bucket.GetObjectToFile,Bucket.DownloadFile都支持限定条件。
import "github.com/aliyun/aliyun-oss-go-sdk/oss"
client, err := oss.New("Endpoint", "AccessKeyId", "AccessKeySecret")
if err != nil {
// HandleError(err)
}
bucket, err := client.Bucket("my-bucket")
if err != nil {
// HandleError(err)
}
err = bucket.GetObjectToFile("my-object.txt", "LocalFile.gzip", oss.AcceptEncoding("gzip"))
if err != nil {
// HandleError(err)
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。