您可以通過一系列的介面管理儲存空間(Bucket)下的檔案(Object),包括以下操作:
判斷檔案是否存在
以下代碼用於判斷指定的檔案是否存在:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取儲存空間。
bucket, err := client.Bucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 判斷檔案是否存在。
isExist, err := bucket.IsObjectExist("<yourObjectName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Exist:", isExist)
}
管理檔案存取權限
檔案的存取權限(ACL)有以下四種:
存取權限 | 描述 | 存取權限值 |
---|---|---|
繼承Bucket | 檔案遵循儲存空間的存取權限。 | oss.ACLDefault |
私有 | 檔案的擁有者和授權使用者有該檔案的讀寫權限,其他使用者沒有許可權操作該檔案。 | oss.ACLPrivate |
公共讀 | 檔案的擁有者和授權使用者有該檔案的讀寫權限,其他使用者只有檔案的讀許可權。請謹慎使用該許可權。 | oss.ACLPublicRead |
公共讀寫 | 所有使用者都有該檔案的讀寫權限。請謹慎使用該許可權。 | oss.PublicReadWrite |
檔案的存取權限優先順序高於儲存空間的存取權限。例如儲存空間的存取權限是私有,而檔案的存取權限是公共讀寫,則所有使用者都有該檔案的讀寫權限。如果某個檔案沒有設定過存取權限,則遵循儲存空間的存取權限。
檔案存取權限的完整範例程式碼請參見GitHub。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取儲存空間。
bucket, err := client.Bucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 設定檔案的存取權限。
err = bucket.SetObjectACL("<yourObjectName>", oss.ACLPublicReadWrite)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取檔案的存取權限。
aclRes, err := bucket.GetObjectACL("<yourObjectName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object ACL:", aclRes.ACL)
}
管理檔案元資訊
檔案元資訊(Object Meta)詳情請參見開發指南中的檔案元資訊。 檔案元資訊的完整代碼請參見GitHub。
設定檔案元資訊
您可以在上傳檔案時設定檔案元資訊。可設定的檔案元資訊如下:
參數 | 說明 |
---|---|
CacheControl | 指定該檔案被下載時的網頁的緩存行為。 |
ContentDisposition | 指定該檔案被下載時的名稱。 |
ContentEncoding | 指定該檔案被下載時的內容編碼格式。 |
Expires | 設定緩存過期時間,格式是格林威治時間(GMT)。 |
ServerSideEncryption | 指定OSS建立檔案時的伺服器端加密編碼演算法。有效值:AES256。 |
ObjectACL | 指定OSS建立的檔案的存取權限。 |
Meta | 自訂元資訊,以X-Oss-Meta- 為首碼的參數。 |
package main
import (
"fmt"
"os"
"time"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取儲存空間。
bucket, err := client.Bucket("<yourBucketName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 設定檔案元資訊:過期時間為2049年1月10日 23:00:00 GMT,存取權限為公共讀,自訂元資訊為MyProp(取值MyPropVal)
expires := time.Date(2049, time.January, 10, 23, 0, 0, 0, time.UTC)
options := []oss.Option{
oss.Expires(expires),
oss.ObjectACL(oss.ACLPublicRead),
oss.Meta("MyProp", "MyPropVal"),
}
// 使用資料流上傳檔案。
err = bucket.PutObject("<yourObjectName>", strings.NewReader("MyObjectValue"), options...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取檔案元資訊。
props, err := bucket.GetObjectDetailedMeta("<yourObjectName>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object Meta:", props)
}
修改檔案元資訊
您可以一次修改一條或多條元資訊,代碼如下:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 一次修改一條元資訊。
err = bucket.SetObjectMeta(objectName, oss.Meta("MyMeta", "MyMetaValue1"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 一次修改多條元資訊。
options := []oss.Option{
oss.Meta("MyMeta", "MyMetaValue2"),
oss.Meta("MyObjectLocation", "HangZhou"),
}
err = bucket.SetObjectMeta(objectName, options...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取檔案元資訊。
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object Meta:", props)
}
獲取檔案元資訊
以下代碼用於獲取檔案元資訊:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 獲取檔案元資訊。
props, err := bucket.GetObjectDetailedMeta(objectName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Object Meta:", props)
}
列舉檔案
OSS檔案按照字母順序排列。您可以通過Bucket.ListObjects
列出儲存空間下的檔案。主要的參數如下:
參數 | 說明 |
---|---|
delimiter | 對檔案名稱進行分組的一個字元。所有名稱包含指定的首碼且第一次出現delimiter字元之間的檔案作為一組元素(commonPrefixes)。 |
prefix | 限定返回的檔案必須以prefix作為首碼。 |
maxKeys | 限定此次列舉檔案的最大個數。預設值為100,最大值為1000。 |
marker | 列舉指定marker之後的檔案。 |
ListObjects的完整代碼請參見Github。>
簡單列舉檔案
您可以使用預設參數獲取儲存空間的檔案清單,預設返回100條記錄。代碼如下:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 簡單列舉檔案。
lsRes, err := bucket.ListObjects()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印結果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
列舉指定個數的檔案
以下代碼用於列舉指定個數的檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 設定列舉檔案的最大個數,並列舉檔案。
lsRes, err := bucket.ListObjects(oss.MaxKeys(200))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印結果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
列舉指定首碼的檔案
以下代碼用於列舉包含指定首碼(prefix)的檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列舉包含指定首碼的檔案。預設列舉100個檔案。
lsRes, err := bucket.ListObjects(oss.Prefix("my-object-"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印結果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
列舉指定marker之後的檔案
參數marker代表檔案名稱。以下代碼用於列舉指定marker之後的檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列舉指定marker之後的檔案。預設列舉100個檔案。
lsRes, err := bucket.ListObjects(oss.Marker("my-object-xx"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 列印結果。
fmt.Println("Objects:", lsRes.Objects)
for _, object := range lsRes.Objects {
fmt.Println("Object:", object.Key)
}
}
分頁列舉所有檔案
以下代碼用於分頁列舉指定儲存空間下的所有檔案。每頁列舉的檔案個數通過maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分頁列舉所有檔案。每頁列舉200個。
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(200), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}
分頁列舉指定marker之後的檔案
以下代碼用於分頁列舉指定maker之後的檔案。每頁列舉的檔案個數通過maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分頁列舉指定maker之後的檔案。每頁列舉200個。
marker = oss.Marker("my-object-xx")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(50), marker)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}
分頁列舉指定首碼的檔案
以下代碼用於分頁列舉包含指定首碼的檔案。每頁列舉的檔案個數通過maxKeys指定。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分頁列舉包含指定首碼的檔案。每頁列舉80個。
prefix := oss.Prefix("my-object-")
marker := oss.Marker("")
for {
lsRes, err := bucket.ListObjects(oss.MaxKeys(80), marker, prefix)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
prefix = oss.Prefix(lsRes.Prefix)
marker = oss.Marker(lsRes.NextMarker)
fmt.Println("Objects:", lsRes.Objects)
if !lsRes.IsTruncated {
break
}
}
}
刪除檔案
請您謹慎使用刪除操作,檔案一旦刪除將無法恢複。
刪除檔案的完整代碼請參見GitHub。
刪除單個檔案
以下代碼用於刪除單個檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 刪除單個檔案。
err = bucket.DeleteObject(objectName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
刪除多個檔案
您可以通過Bucket.DeleteObjects
來刪除多個檔案,並通過DeleteObjectsQuiet
參數來指定是否返回刪除的結果。預設返回刪除成功的檔案。
以下代碼用於大量刪除檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 返回刪除成功的檔案。
delRes, err := bucket.DeleteObjects([]string{"my-object-1", "my-object-2"})
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("Deleted Objects:", delRes.DeletedObjects)
// 不返回刪除的結果。
_, err = bucket.DeleteObjects([]string{"my-object-3", "my-object-4"},
oss.DeleteObjectsQuiet(true))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
拷貝檔案
拷貝檔案的完整代碼請參見Github。
同一儲存空間內拷貝檔案
以下代碼用於在同一個儲存空間內拷貝檔案:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
destObjectName := "<yourDestObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 拷貝檔案到同一個儲存空間的另一個檔案。
_, err = bucket.CopyObject(objectName, destObjectName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
跨儲存空間拷貝檔案
您可以將其它儲存空間的檔案拷貝到當前儲存空間,也可以將當前儲存空間的檔案拷貝到其它儲存空間。代碼如下:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
// client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
srcBucketName := "<yourSrcBucketName>"
dstBucketName := "<yourDstBucketName>"
srcObjectName := "<yourSrcObjectName>"
dstObjectName := "<yourDstObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 從其它儲存空間(srcBucketName)拷貝源檔案(srcObjectName)到本儲存空間。
bucket.CopyObjectFrom(srcBucketName, srcObjectName, dstObjectName)
if err != nil {
fmt.Println("CopyObjectFrom Error:", err)
os.Exit(-1)
}
// 從本儲存空間拷貝源檔案(srcObjectName)到其它儲存空間(dstBucketName)。
bucket.CopyObjectTo(dstBucketName, dstObjectName, srcObjectName)
if err != nil {
fmt.Println("CopyObjectTo Error:", err)
os.Exit(-1)
}
}
拷貝時處理檔案元資訊
您可以在拷貝檔案時通過MetadataDirective
參數來處理檔案元資訊。MetadataDirective
的取值如下:
- oss.MetaCopy:預設值。目標檔案的元資訊與源檔案的元資訊相同,即拷貝源檔案的元資訊。
- oss.MetaReplace:使用指定的元資訊覆蓋源檔案的元資訊。
MetadataDirective
取值為oss.MetaReplace時,可以指定的元資訊如下:
參數 | 說明 |
---|---|
CacheControl | 指定目標檔案被下載時的網頁的緩存行為。 |
ContentDisposition | 指定目標檔案被下載時的名稱。 |
ContentEncoding | 指定目標檔案被下載時的內容編碼格式。 |
Expires | 設定緩存過期時間,格式是格林威治時間(GMT)。 |
ServerSideEncryption | 指定OSS建立目標檔案時的伺服器端加密編碼演算法。有效值:AES256。 |
ObjectACL | 指定OSS建立的目標檔案的存取權限。 |
Meta | 自訂元資訊,以X-Oss-Meta- 為首碼的參數。 |
以下代碼用於在拷貝時處理檔案元資訊:
package main
import (
"fmt"
"os"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
destObjectName := "<yourDestObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 指定目標檔案的元資訊。
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(objectName, destObjectName, options...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
限定條件拷貝
拷貝檔案時,可以指定一個或多個限定條件。滿足限定條件則拷貝,不滿足則返回錯誤,不拷貝。可以使用的限定條件如下:
參數 | 說明 |
---|---|
CopySourceIfMatch | 如果源檔案的ETag和指定的ETag匹配,則執行拷貝操作;否則返回錯誤。 |
CopySourceIfNoneMatch | 如果源檔案的ETag和指定的ETag不匹配,則執行拷貝操作;否則返回錯誤。 |
CopySourceIfModifiedSince | 如果指定的時間早於實際修改時間,則執行拷貝操作;否則返回錯誤。 |
CopySourceIfUnmodifiedSince | 如果指定的時間等於或者晚於檔案實際修改時間,則執行拷貝操作;否則返回錯誤。 |
CopySourceIfMatch和CopySourceIfNoneMatch可以同時存在。CopySourceIfModifiedSince和CopySourceIfUnmodifiedSince可以同時存在。
以下代碼用於限定條件拷貝:
package main
import (
"fmt"
"os"
"time"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 建立OSSClient執行個體。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// bucketName := "<yourBucketName>"
// objectName := "<yourObjectName>"
bucketName := "<yourBucketName>"
objectName := "<yourObjectName>"
destMatchObjectName := "<yourMatchDestObjectName>"
destUnMatchObjectName := "<yourUnmatchDestObjectName>"
// 獲取儲存空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
date := time.Date(2011, time.November, 10, 23, 0, 0, 0, time.UTC)
// 滿足限定條件,執行拷貝。
_, err = bucket.CopyObject(objectName, destMatchObjectName, oss.CopySourceIfModifiedSince(date))
if err != nil {
fmt.Println("CopyObject CopySourceIfModifiedSince Error:", err)
}
// 不滿足限定條件,不執行拷貝。
_, err = bucket.CopyObject(objectName, destUnMatchObjectName, oss.CopySourceIfUnmodifiedSince(date))
if err != nil {
fmt.Println("CopyObject CopySourceIfUnmodifiedSince Error:", err)
}
}