版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
详细解答可以参考官方帮助文档
使用Bucket.CopyObject或Bucket.CopyObjectToBucket拷贝文件,前者是同一个Bucket内的文件拷贝,后者是Bucket之间的文件拷贝。
提示:
- 拷贝文件的示例代码在
sample/copy_objects.go
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.CopyObject("my-object", "descObjectKey")
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.CopyObjectToBucket("my-object", "my-bucket-desc", "descObjectKey")
if err != nil {
// HandleError(err)
}
文件拷贝(CopyObject/CopyObjectToBucket)时对文件元信息的处理有两种选择,通过MetadataDirective参数指定:
默认值是oss.MetaCopy。
COPY时,MetadataDirective为MetaReplace时,用户可以指定新对象的如下的元信息:
| 元信息 | 说明 |
|---|---|
| CacheControl | 指定新Object被下载时的网页的缓存行为。 |
| ContentDisposition | 指定新Object被下载时的名称。 |
| ContentEncoding | 指定新Object被下载时的内容编码格式。 |
| Expires | 指定新Object过期时间(seconds)更详细描述请参照RFC2616。 |
| ServerSideEncryption | 指定OSS创建新Object时的服务器端加密编码算法。 |
| ObjectACL | 指定OSS创建新Object时的访问权限。 |
| Meta | 自定义参数,以"X-Oss-Meta-"为前缀的参数。 |
import (
"time"
"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)
}
expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
options := []oss.Option{
oss.MetadataDirective(oss.MetaReplace),
oss.Expires(expires),
oss.ObjectACL(oss.ACLPublicRead),
oss.Meta("MyMeta", "MyMetaValue")}
_, err = bucket.CopyObject("my-object", "descObjectKey", options...)
if err != nil {
// HandleError(err)
}
文件拷贝时可以设置限定条件,条件满足时拷贝,不满足时报错不拷贝。可以使用的限定条件如下:
| 参数 | 说明 |
|---|---|
| CopySourceIfMatch | 如果源Object的ETAG值和用户提供的ETAG相等,则执行拷贝操作;否则返回错误。 |
| CopySourceIfNoneMatch | 如果源Object的ETAG值和用户提供的ETAG不相等,则执行拷贝操作;否则返回错误。 |
| CopySourceIfModifiedSince | 如果传入参数中的时间等于或者晚于源文件实际修改时间,则正常拷贝;否则返回错误。 |
| CopySourceIfUnmodifiedSince | 如果源Object自从用户指定的时间以后被修改过,则执行拷贝操作;否则返回错误。 |
import (
"fmt"
"time"
"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.CopyObject("my-object", "descObjectKey", oss.CopySourceIfModifiedSince(date))
fmt.Println("CopyObjectError:", err)
// 约束条件满足,拷贝执行
_, err = bucket.CopyObject("my-object", "descObjectKey", oss.CopySourceIfUnmodifiedSince(date))
if err != nil {
// HandleError(err)
}
提示:
- Bucket.CopyObject、Bucket.CopyObjectToBucket都支持拷贝时处理文件元信息、限定拷贝条件。