By default, when you call the GetObject operation on an object in a versioning-enabled bucket, only the current version of the object is returned.

Precautions

When you call the GetObject operation to download an object in a bucket, the returned result is different based on the actual scenarios:
  • If the current version of the object is a delete marker, Object Storage Service (OSS) returns 404 Not Found.
  • If the version ID of the object is specified in the request, OSS returns the specified version of the object. If the version ID is set to null in the request, OSS returns the version whose version ID is null.
  • If the version ID specified in the request is the version ID of a delete marker, OSS returns 405 Method Not Allowed.

Sample code

The following code provides an example on how to download objects from a bucket.

package main

import (
  "fmt"
  "net/http"
  "os"  

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // Create an OSSClient instance. 
    // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
    // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
    client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
    if err != nil {
      fmt.Println("Error:", err)
      os.Exit(-1)
  }

  // Specify the name of the bucket. 
  bucket, err := client.Bucket("<yourBucketName>")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }

  var retHeader http.Header
  // Download the specified version to the cache. 
  // Set yourObjectName to the full path of the object. The full path cannot contain the bucket name. 
  _, err = bucket.GetObject("youObjectName", oss.VersionId("yourObjectVersionId"), oss.GetResponseHeader(&retHeader))
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // Display the value of x-oss-version-id. 
  fmt.Println("x-oss-version-id:",  oss.GetVersionId(retHeader))
}

References

  • For the complete sample code that is used to download an object, visit GitHub.
  • For more information about the API operation that you can call to download an object, see GetObject.