本文介绍如何列举存储空间下(Bucket)中的所有文件(Object)、指定个数的文件、指定前缀的文件等。
列举指定个数的文件
以下代码用于列举examplebucket中最多20个文件。
// 填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 填写返回文件的最大个数。如果不设置此参数,则默认值为100,maxkeys的取值不能大于1000。 request.setMaxKeys(20); oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", objectSummary.getKey()); } } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } });
列举指定前缀的文件
以下代码用于列举examplebucket中以file为前缀的文件。
// 填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 填写前缀。 request.setPrefix("file"); oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", objectSummary.getKey()); } } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } });
列举指定marker之后的文件
以下代码用于列举examplebucket中exampleobject.txt之后的文件。
// 填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 填写marker。从marker之后按字母排序的第一个开始返回文件。 // 如果marker在存储空间中不存在,则会从符合marker字母排序的下一个开始返回文件。 request.setMarker("exampleobject.txt"); oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", objectSummary.getKey()); } } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } });
分页列举所有文件
以下代码用于分页列举examplebucket中的所有文件,每页最多返回20个文件。
private String marker = null; private boolean isCompleted = false; // 分页列举所有object public void getAllObject() { do { OSSAsyncTask task = getObjectList(); // 阻塞等待请求完成获取NextMarker,请求下一页时需要将请求的marker设置为上一页请求返回的NextMarker。第一页无需设置。 // 示例中通过循环分页列举数据,因此需要阻塞等待请求完成获取NextMarker才能请求下一页数据,实际使用时可根据实际场景判断是否需要阻塞。 task.waitUntilFinished(); } while (!isCompleted); } // 列举一页文件。 public OSSAsyncTask getObjectList() { //填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 填写每页返回文件的最大个数。如果不设置此参数,则默认值为100,maxkeys的取值不能大于1000。 request.setMaxKeys(20); request.setMarker(marker); OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", objectSummary.getKey()); } // 最后一页。 if (!result.isTruncated()) { isCompleted = true; return; } // 下一次列举文件的marker。 marker = result.getNextMarker(); } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { isCompleted = true; // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } }); return task; }
分页列举指定前缀的文件
以下代码用于分页列举examplebucket中以file为前缀的文件,每页最多返回20个文件。
private String marker = null; private boolean isCompleted = false; // 分页列举所有文件。 public void getAllObject() { do { OSSAsyncTask task = getObjectList(); // 阻塞等待请求完成获取NextMarker,请求下一页时需要将请求的marker设置为上一页请求返回的NextMarker。第一页无需设置。 // 示例中通过循环分页列举数据,因此需要阻塞等待请求完成获取NextMarker才能请求下一页数据,实际使用时可根据实际场景判断是否需要阻塞。 task.waitUntilFinished(); } while (!isCompleted); } // 列举一页文件。 public OSSAsyncTask getObjectList() { // 填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 填写每页返回文件的最大个数。如果不设置此参数,则默认值为100,maxkeys的取值不能大于1000。 request.setMaxKeys(20); // 填写前缀。 request.setPrefix("file"); request.setMarker(marker); OSSAsyncTask task = oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", objectSummary.getKey()); } // 最后一页。 if (!result.isTruncated()) { isCompleted = true; return; } // 下一次列举文件的marker。 marker = result.getNextMarker(); } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { isCompleted = true; // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } }); return task; }
列举名称包含特殊字符的文件
如果文件名称包含以下特殊字符,需要进行编码传输。OSS目前仅支持URL编码。
- 单引号(' ')
- 双引号(" ")
- and符号(&)
- 尖括号(< >)
- 顿号(、)
- 中文
以下代码用于列举examplebucket中名称包含特殊字符的文件。
// 填写Bucket名称。 ListObjectsRequest request = new ListObjectsRequest("examplebucket"); // 指定文件名称编码。 request.setEncodingType("url"); oss.asyncListObjects(request, new OSSCompletedCallback<ListObjectsRequest, ListObjectsResult>() { @Override public void onSuccess(ListObjectsRequest request, ListObjectsResult result) { for (OSSObjectSummary objectSummary : result.getObjectSummaries()) { Log.i("ListObjects", URLDecoder.decode(objectSummary.getKey(), "UTF-8")); } } @Override public void onFailure(ListObjectsRequest request, ClientException clientException, ServiceException serviceException) { // 请求异常。 if (clientException != null) { // 客户端异常,例如网络异常等。 clientException.printStackTrace(); } if (serviceException != null) { // 服务端异常。 Log.e("ErrorCode", serviceException.getErrorCode()); Log.e("RequestId", serviceException.getRequestId()); Log.e("HostId", serviceException.getHostId()); Log.e("RawMessage", serviceException.getRawMessage()); } } });
关于列举文件的更多信息,请参见GetBucket (ListObjects)。