文件管理

上传文件

在BOS中,用户操作的基本数据单元是Object。Object包含Key、Meta和Data。其中,Key是Object的名字;Meta是用户对该Object的描述,由一系列Name-Value对组成;Data是Object的数据。

BOS GO SDK提供了丰富的文件上传接口,可以通过以下方式上传文件:

  • 简单上传
  • 追加上传
  • 抓取上传
  • 分块上传

简单上传

BOS在简单上传的场景中,支持以指定文件形式、以数据流方式、以二进制串方式、以字符串方式执行Object上传,请参考如下代码:

// import "github.com/baidubce/bce-sdk-go/bce"

// 从本地文件上传
etag, err := bosClient.PutObjectFromFile(bucketName, objectName, fileName, nil)

// 从字符串上传
str := "test put object"
etag, err := bosClient.PutObjectFromString(bucketName, objectName, str, nil)

// 从字节数组上传
byteArr := []byte("test put object")
etag, err := bosClient.PutObjectFromBytes(bucketName, objectName, byteArr, nil)

// 从数据流上传
bodyStream, err := bce.NewBodyFromFile(fileName)
etag, err := bosClient.PutObject(bucketName, objectName, bodyStream, nil)

// 使用基本接口,提供必需参数从数据流上传
bodyStream, err := bce.NewBodyFromFile(fileName)
etag, err := bosClient.BasicPutObject(bucketName, objectName, bodyStream)

Object以文件的形式上传到BOS中,上述简单上传的接口支持不超过5GB的Object上传。在请求处理成功后,BOS会在Header中返回Object的ETag作为文件标识。

设置文件元信息

文件元信息(Object Meta),是对用户在向BOS上传文件时,同时对文件进行的属性描述,主要分为分为两种:设置HTTP标准属性(HTTP Headers)和用户自定义的元信息。

设定Object的Http Header

BOS GO SDK本质上是调用后台的HTTP接口,因此用户可以在上传文件时自定义Object的Http Header。常用的http header说明如下:

名称 描述 默认值
Content-MD5 文件数据校验,设置后BOS会启用文件内容MD5校验,把您提供的MD5与文件的MD5比较,不一致会抛出错误
Content-Type 文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如没有指定,BOS则根据文件的扩展名自动生成,如文件没有扩展名则填默认值 application/octet-stream
Content-Disposition 指示MIME用户代理如何显示附加的文件,打开或下载,及文件名称
Content-Length 上传的文件的长度,超过流/文件的长度会截断,不足为实际值 流/文件的长度
Expires 缓存过期时间
Cache-Control 指定该Object被下载时的网页的缓存行为

参考代码如下:

// import "github.com/baidubce/bce-sdk-go/services/bos/api"

args := new(api.PutObjectArgs)

// 设置上传内容的MIME类型
args.ContentType = "text/javascript"

// 设置上传内容的长度
args.ContentLength = 1024

// 设置缓存过期时间
args.Expires = "Mon, 19 Mar 2018 11:55:32 GMT"

// 设置缓存行为
args.CacheControl = "max-age=3600"

etag, err := bosClient.PutObject(bucketName, objectName, bodyStream, args)

注意:用户上传对象时SDK会自动设置ContentLength和ContentMD5,用来保证数据的正确性。如果用户自行设定ContentLength,必须为大于等于0且小于等于实际对象大小的数值,从而上传截断部分的内容,为负数或大于实际大小均报错。

用户自定义元信息

BOS支持用户自定义元数据来对Object进行描述。如下代码所示:

// import "github.com/baidubce/bce-sdk-go/services/bos/api"

args := new(api.PutObjectArgs)

// 设置