通过 listObjectVersions 接口,可以列举桶内的多版本对象信息,每次最大返回 1000 个多版本对象。
参数 | 描述 |
---|---|
prefix | 本次查询结果的前缀。 |
delimiter | 进行对象名称分组的字符。 |
keyMarker | 此次列举对象的起点。 |
encodingType | 返回 Key 编码类型。 |
maxKeys | 最大返回数。 |
versionIdMarker | 版本号分页标识。 |
以下代码展示如何分页列举所有多版本对象。
import android.os.Bundle; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import com.volcengine.tos.TOSV2; import com.volcengine.tos.TOSV2ClientBuilder; import com.volcengine.tos.TosException; import com.volcengine.tos.model.object.ListObjectVersionsV2Input; import com.volcengine.tos.model.object.ListObjectVersionsV2Output; import com.volcengine.tos.model.object.ListedDeleteMarkerEntry; public class ListObjectVersionsLoopExample extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { String endpoint = "your endpoint"; String region = "your region"; String accessKey = "your access key"; String secretKey = "your secret key"; String securityToken = "your security token"; String bucketName = "your bucket name"; int maxKeys = 1000; super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey, securityToken); Thread tosThread = new Thread(new Runnable() { @Override public void run() { try{ boolean isTruncated = true; String keyMarker = ""; String versionIDMarker = ""; int total = 0; while (isTruncated) { ListObjectVersionsV2Input input = new ListObjectVersionsV2Input() // 必须设置 bucket name .setBucket(bucketName).setMaxKeys(maxKeys) .setKeyMarker(keyMarker).setVersionIDMarker(versionIDMarker); ListObjectVersionsV2Output output = tos.listObjectVersions(input); Log.i("listObjectVersions", "listObjectVersions succeed, is truncated? " + output.isTruncated() + "next key marker is " + output.getNextKeyMarker() + "next version id marker is" + output.getNextVersionIDMarker()); if (output.getDeleteMarkers() != null) { for (int i = 0; i < output.getDeleteMarkers().size(); i++) { ListedDeleteMarkerEntry entry = output.getDeleteMarkers().get(i); Log.i("listObjectVersions", "No." + (i+1+total) + " listed entry is " + entry); } total += output.getDeleteMarkers().size(); } isTruncated = output.isTruncated(); keyMarker = output.getNextKeyMarker(); versionIDMarker = output.getVersionIDMarker(); } } catch (TosException e) { Log.e("TosException", "listObjectVersions failed"); e.printStackTrace(); } } }); tosThread.start(); } }
关于列举多版本对象的 API 文档,请参见 ListObjectsVersions。